
// this is autogenerated file, do not edit it.
#include "ficus/ficus.h"

struct _fx_N13Ast__binary_t_data_t;

static void _fx_free_N13Ast__binary_t(struct _fx_N13Ast__binary_t_data_t** dst);

struct _fx_N14K_form__ktyp_t_data_t;

static void _fx_free_N14K_form__ktyp_t(struct _fx_N14K_form__ktyp_t_data_t** dst);

struct _fx_N14K_form__kexp_t_data_t;

static void _fx_free_N14K_form__kexp_t(struct _fx_N14K_form__kexp_t_data_t** dst);

typedef struct _fx_LS_data_t {
   int_ rc;
   struct _fx_LS_data_t* tl;
   fx_str_t hd;
} _fx_LS_data_t, *_fx_LS;

typedef struct _fx_R7File__t {
   fx_cptr_t handle;
} _fx_R7File__t;

typedef struct _fx_Ta2i {
   int_ t0;
   int_ t1;
} _fx_Ta2i;

typedef struct _fx_T2Ta2iS {
   struct _fx_Ta2i t0;
   fx_str_t t1;
} _fx_T2Ta2iS;

typedef struct _fx_R9Ast__id_t {
   int_ m;
   int_ i;
   int_ j;
} _fx_R9Ast__id_t;

typedef struct _fx_R10Ast__loc_t {
   int_ m_idx;
   int_ line0;
   int_ col0;
   int_ line1;
   int_ col1;
} _fx_R10Ast__loc_t;

typedef struct _fx_T2Bi {
   bool t0;
   int_ t1;
} _fx_T2Bi;

typedef struct _fx_N12Ast__scope_t {
   int tag;
   union {
      int_ ScBlock;
      struct _fx_T2Bi ScLoop;
      int_ ScFold;
      int_ ScArrMap;
      int_ ScMap;
      int_ ScTry;
      struct _fx_R9Ast__id_t ScFun;
      struct _fx_R9Ast__id_t ScClass;
      struct _fx_R9Ast__id_t ScInterface;
      int_ ScModule;
   } u;
} _fx_N12Ast__scope_t;

typedef struct _fx_LN12Ast__scope_t_data_t {
   int_ rc;
   struct _fx_LN12Ast__scope_t_data_t* tl;
   struct _fx_N12Ast__scope_t hd;
} _fx_LN12Ast__scope_t_data_t, *_fx_LN12Ast__scope_t;

typedef struct _fx_N17Ast__fun_constr_t {
   int tag;
   union {
      int_ CtorVariant;
      struct _fx_R9Ast__id_t CtorFP;
      struct _fx_R9Ast__id_t CtorExn;
   } u;
} _fx_N17Ast__fun_constr_t;

typedef struct _fx_R16Ast__fun_flags_t {
   int_ fun_flag_pure;
   bool fun_flag_ccode;
   bool fun_flag_have_keywords;
   bool fun_flag_inline;
   bool fun_flag_nothrow;
   bool fun_flag_really_nothrow;
   bool fun_flag_private;
   struct _fx_N17Ast__fun_constr_t fun_flag_ctor;
   struct _fx_R9Ast__id_t fun_flag_method_of;
   bool fun_flag_uses_fv;
   bool fun_flag_recursive;
   bool fun_flag_instance;
} _fx_R16Ast__fun_flags_t;

typedef struct _fx_LR9Ast__id_t_data_t {
   int_ rc;
   struct _fx_LR9Ast__id_t_data_t* tl;
   struct _fx_R9Ast__id_t hd;
} _fx_LR9Ast__id_t_data_t, *_fx_LR9Ast__id_t;

typedef struct _fx_T2R9Ast__id_ti {
   struct _fx_R9Ast__id_t t0;
   int_ t1;
} _fx_T2R9Ast__id_ti;

typedef struct _fx_R16Ast__val_flags_t {
   bool val_flag_arg;
   bool val_flag_mutable;
   bool val_flag_temp;
   bool val_flag_tempref;
   bool val_flag_private;
   bool val_flag_subarray;
   bool val_flag_instance;
   struct _fx_T2R9Ast__id_ti val_flag_method;
   int_ val_flag_ctor;
   struct _fx_LN12Ast__scope_t_data_t* val_flag_global;
} _fx_R16Ast__val_flags_t;

typedef struct _fx_R17K_form__kdefval_t {
   struct _fx_R9Ast__id_t kv_name;
   fx_str_t kv_cname;
   struct _fx_N14K_form__ktyp_t_data_t* kv_typ;
   struct _fx_R16Ast__val_flags_t kv_flags;
   struct _fx_R10Ast__loc_t kv_loc;
} _fx_R17K_form__kdefval_t;

typedef struct _fx_T2R9Ast__id_tN14K_form__ktyp_t {
   struct _fx_R9Ast__id_t t0;
   struct _fx_N14K_form__ktyp_t_data_t* t1;
} _fx_T2R9Ast__id_tN14K_form__ktyp_t;

typedef struct _fx_LT2R9Ast__id_tN14K_form__ktyp_t_data_t {
   int_ rc;
   struct _fx_LT2R9Ast__id_tN14K_form__ktyp_t_data_t* tl;
   struct _fx_T2R9Ast__id_tN14K_form__ktyp_t hd;
} _fx_LT2R9Ast__id_tN14K_form__ktyp_t_data_t, *_fx_LT2R9Ast__id_tN14K_form__ktyp_t;

typedef struct _fx_R23K_form__kdefinterface_t {
   struct _fx_R9Ast__id_t ki_name;
   struct _fx_R9Ast__id_t ki_base;
   fx_str_t ki_cname;
   struct _fx_R9Ast__id_t ki_id;
   struct _fx_LT2R9Ast__id_tN14K_form__ktyp_t_data_t* ki_all_methods;
   struct _fx_LN12Ast__scope_t_data_t* ki_scope;
   struct _fx_R10Ast__loc_t ki_loc;
} _fx_R23K_form__kdefinterface_t;

typedef struct _fx_rR23K_form__kdefinterface_t_data_t {
   int_ rc;
   struct _fx_R23K_form__kdefinterface_t data;
} _fx_rR23K_form__kdefinterface_t_data_t, *_fx_rR23K_form__kdefinterface_t;

typedef struct _fx_R25K_form__kdefclosureinfo_t {
   struct _fx_R9Ast__id_t kci_arg;
   struct _fx_R9Ast__id_t kci_fcv_t;
   struct _fx_R9Ast__id_t kci_fp_typ;
   struct _fx_R9Ast__id_t kci_make_fp;
   struct _fx_R9Ast__id_t kci_wrap_f;
} _fx_R25K_form__kdefclosureinfo_t;

typedef struct _fx_R17K_form__kdeffun_t {
   struct _fx_R9Ast__id_t kf_name;
   fx_str_t kf_cname;
   struct _fx_LR9Ast__id_t_data_t* kf_params;
   struct _fx_N14K_form__ktyp_t_data_t* kf_rt;
   struct _fx_N14K_form__kexp_t_data_t* kf_body;
   struct _fx_R16Ast__fun_flags_t kf_flags;
   struct _fx_R25K_form__kdefclosureinfo_t kf_closure;
   struct _fx_LN12Ast__scope_t_data_t* kf_scope;
   struct _fx_R10Ast__loc_t kf_loc;
} _fx_R17K_form__kdeffun_t;

typedef struct _fx_rR17K_form__kdeffun_t_data_t {
   int_ rc;
   struct _fx_R17K_form__kdeffun_t data;
} _fx_rR17K_form__kdeffun_t_data_t, *_fx_rR17K_form__kdeffun_t;

typedef struct _fx_R17K_form__kdefexn_t {
   struct _fx_R9Ast__id_t ke_name;
   fx_str_t ke_cname;
   fx_str_t ke_base_cname;
   struct _fx_N14K_form__ktyp_t_data_t* ke_typ;
   bool ke_std;
   struct _fx_R9Ast__id_t ke_tag;
   struct _fx_R9Ast__id_t ke_make;
   struct _fx_LN12Ast__scope_t_data_t* ke_scope;
   struct _fx_R10Ast__loc_t ke_loc;
} _fx_R17K_form__kdefexn_t;

typedef struct _fx_rR17K_form__kdefexn_t_data_t {
   int_ rc;
   struct _fx_R17K_form__kdefexn_t data;
} _fx_rR17K_form__kdefexn_t_data_t, *_fx_rR17K_form__kdefexn_t;

typedef struct _fx_R17K_form__ktprops_t {
   bool ktp_complex;
   bool ktp_scalar;
   bool ktp_ptr;
   bool ktp_pass_by_ref;
   bool ktp_custom_free;
   bool ktp_custom_copy;
} _fx_R17K_form__ktprops_t;

typedef struct _fx_Nt6option1R17K_form__ktprops_t {
   int tag;
   union {
      struct _fx_R17K_form__ktprops_t Some;
   } u;
} _fx_Nt6option1R17K_form__ktprops_t;

typedef struct _fx_R16Ast__var_flags_t {
   int_ var_flag_class_from;
   bool var_flag_record;
   bool var_flag_recursive;
   bool var_flag_have_tag;
   bool var_flag_have_mutable;
   bool var_flag_opt;
   bool var_flag_instance;
} _fx_R16Ast__var_flags_t;

typedef struct _fx_LN14K_form__ktyp_t_data_t {
   int_ rc;
   struct _fx_LN14K_form__ktyp_t_data_t* tl;
   struct _fx_N14K_form__ktyp_t_data_t* hd;
} _fx_LN14K_form__ktyp_t_data_t, *_fx_LN14K_form__ktyp_t;

typedef struct _fx_T2R9Ast__id_tLR9Ast__id_t {
   struct _fx_R9Ast__id_t t0;
   struct _fx_LR9Ast__id_t_data_t* t1;
} _fx_T2R9Ast__id_tLR9Ast__id_t;

typedef struct _fx_LT2R9Ast__id_tLR9Ast__id_t_data_t {
   int_ rc;
   struct _fx_LT2R9Ast__id_tLR9Ast__id_t_data_t* tl;
   struct _fx_T2R9Ast__id_tLR9Ast__id_t hd;
} _fx_LT2R9Ast__id_tLR9Ast__id_t_data_t, *_fx_LT2R9Ast__id_tLR9Ast__id_t;

typedef struct _fx_R21K_form__kdefvariant_t {
   struct _fx_R9Ast__id_t kvar_name;
   fx_str_t kvar_cname;
   struct _fx_R9Ast__id_t kvar_proto;
   struct _fx_Nt6option1R17K_form__ktprops_t kvar_props;
   struct _fx_LN14K_form__ktyp_t_data_t* kvar_targs;
   struct _fx_LT2R9Ast__id_tN14K_form__ktyp_t_data_t* kvar_cases;
   struct _fx_LR9Ast__id_t_data_t* kvar_ctors;
   struct _fx_R16Ast__var_flags_t kvar_flags;
   struct _fx_LT2R9Ast__id_tLR9Ast__id_t_data_t* kvar_ifaces;
   struct _fx_LN12Ast__scope_t_data_t* kvar_scope;
   struct _fx_R10Ast__loc_t kvar_loc;
} _fx_R21K_form__kdefvariant_t;

typedef struct _fx_rR21K_form__kdefvariant_t_data_t {
   int_ rc;
   struct _fx_R21K_form__kdefvariant_t data;
} _fx_rR21K_form__kdefvariant_t_data_t, *_fx_rR21K_form__kdefvariant_t;

typedef struct _fx_R17K_form__kdeftyp_t {
   struct _fx_R9Ast__id_t kt_name;
   fx_str_t kt_cname;
   struct _fx_R9Ast__id_t kt_proto;
   struct _fx_Nt6option1R17K_form__ktprops_t kt_props;
   struct _fx_LN14K_form__ktyp_t_data_t* kt_targs;
   struct _fx_N14K_form__ktyp_t_data_t* kt_typ;
   struct _fx_LN12Ast__scope_t_data_t* kt_scope;
   struct _fx_R10Ast__loc_t kt_loc;
} _fx_R17K_form__kdeftyp_t;

typedef struct _fx_rR17K_form__kdeftyp_t_data_t {
   int_ rc;
   struct _fx_R17K_form__kdeftyp_t data;
} _fx_rR17K_form__kdeftyp_t_data_t, *_fx_rR17K_form__kdeftyp_t;

typedef struct _fx_R25K_form__kdefclosurevars_t {
   struct _fx_R9Ast__id_t kcv_name;
   fx_str_t kcv_cname;
   struct _fx_LT2R9Ast__id_tN14K_form__ktyp_t_data_t* kcv_freevars;
   struct _fx_LR9Ast__id_t_data_t* kcv_orig_freevars;
   struct _fx_LN12Ast__scope_t_data_t* kcv_scope;
   struct _fx_R10Ast__loc_t kcv_loc;
} _fx_R25K_form__kdefclosurevars_t;

typedef struct _fx_rR25K_form__kdefclosurevars_t_data_t {
   int_ rc;
   struct _fx_R25K_form__kdefclosurevars_t data;
} _fx_rR25K_form__kdefclosurevars_t_data_t, *_fx_rR25K_form__kdefclosurevars_t;

typedef struct _fx_N15K_form__kinfo_t {
   int tag;
   union {
      struct _fx_R17K_form__kdefval_t KVal;
      struct _fx_rR17K_form__kdeffun_t_data_t* KFun;
      struct _fx_rR17K_form__kdefexn_t_data_t* KExn;
      struct _fx_rR21K_form__kdefvariant_t_data_t* KVariant;
      struct _fx_rR25K_form__kdefclosurevars_t_data_t* KClosureVars;
      struct _fx_rR23K_form__kdefinterface_t_data_t* KInterface;
      struct _fx_rR17K_form__kdeftyp_t_data_t* KTyp;
   } u;
} _fx_N15K_form__kinfo_t;

typedef struct _fx_T2R10Ast__loc_tS {
   struct _fx_R10Ast__loc_t t0;
   fx_str_t t1;
} _fx_T2R10Ast__loc_tS;

typedef struct _fx_N12Ast__cmpop_t {
   int tag;
} _fx_N12Ast__cmpop_t;

typedef struct _fx_N13Ast__binary_t_data_t {
   int_ rc;
   int tag;
   union {
      struct _fx_N12Ast__cmpop_t OpCmp;
      struct _fx_N12Ast__cmpop_t OpDotCmp;
      struct _fx_N13Ast__binary_t_data_t* OpAugBinary;
   } u;
} _fx_N13Ast__binary_t_data_t, *_fx_N13Ast__binary_t;

typedef struct _fx_N12Ast__unary_t {
   int tag;
} _fx_N12Ast__unary_t;

typedef struct _fx_N12Ast__sctyp_t {
   int tag;
} _fx_N12Ast__sctyp_t;

typedef struct _fx_N13Ast__intrin_t {
   int tag;
   union {
      struct _fx_R9Ast__id_t IntrinMath;
      struct _fx_N12Ast__sctyp_t IntrinSaturate;
   } u;
} _fx_N13Ast__intrin_t;

typedef struct _fx_N15Ast__for_make_t {
   int tag;
} _fx_N15Ast__for_make_t;

typedef struct _fx_N13Ast__border_t {
   int tag;
} _fx_N13Ast__border_t;

typedef struct _fx_N18Ast__interpolate_t {
   int tag;
} _fx_N18Ast__interpolate_t;

typedef struct _fx_T2SR10Ast__loc_t {
   fx_str_t t0;
   struct _fx_R10Ast__loc_t t1;
} _fx_T2SR10Ast__loc_t;

typedef struct _fx_LT2SR10Ast__loc_t_data_t {
   int_ rc;
   struct _fx_LT2SR10Ast__loc_t_data_t* tl;
   struct _fx_T2SR10Ast__loc_t hd;
} _fx_LT2SR10Ast__loc_t_data_t, *_fx_LT2SR10Ast__loc_t;

typedef struct _fx_Li_data_t {
   int_ rc;
   struct _fx_Li_data_t* tl;
   int_ hd;
} _fx_Li_data_t, *_fx_Li;

typedef struct _fx_N13PP__ppstyle_t {
   int tag;
} _fx_N13PP__ppstyle_t;

typedef struct _fx_T3iiC {
   int_ t0;
   int_ t1;
   char_ t2;
} _fx_T3iiC;

typedef struct _fx_T2iN13PP__ppstyle_t {
   int_ t0;
   struct _fx_N13PP__ppstyle_t t1;
} _fx_T2iN13PP__ppstyle_t;

typedef struct _fx_N11PP__pptok_t {
   int tag;
   union {
      fx_str_t PPString;
      struct _fx_T3iiC PPBreak;
      struct _fx_T2iN13PP__ppstyle_t PPBegin;
   } u;
} _fx_N11PP__pptok_t;

typedef struct _fx_T2N11PP__pptok_ti {
   struct _fx_N11PP__pptok_t t0;
   int_ t1;
} _fx_T2N11PP__pptok_ti;

typedef struct _fx_R11PP__state_t {
   int_ space;
   int_ left;
   int_ right;
   int_ top;
   int_ bottom;
   int_ lefttotal;
   int_ righttotal;
   fx_arr_t q;
   fx_arr_t stack;
   fx_arr_t pp_stack;
   int_ pp_top;
   bool emptystack;
} _fx_R11PP__state_t;

typedef struct _fx_FPv1S {
   int (*fp)(fx_str_t*, void*);
   fx_fcv_t* fcv;
} _fx_FPv1S;

typedef struct _fx_FPLS0 {
   int (*fp)(struct _fx_LS_data_t**, void*);
   fx_fcv_t* fcv;
} _fx_FPLS0;

typedef struct _fx_rR11PP__state_t_data_t {
   int_ rc;
   struct _fx_R11PP__state_t data;
} _fx_rR11PP__state_t_data_t, *_fx_rR11PP__state_t;

typedef struct _fx_R5PP__t {
   int_ margin;
   int_ default_indent;
   struct _fx_FPv1S print_f;
   struct _fx_FPLS0 get_f;
   struct _fx_rR11PP__state_t_data_t* r;
} _fx_R5PP__t;

typedef struct _fx_R16Ast__for_flags_t {
   bool for_flag_parallel;
   struct _fx_N15Ast__for_make_t for_flag_make;
   bool for_flag_unzip;
   bool for_flag_fold;
   bool for_flag_nested;
} _fx_R16Ast__for_flags_t;

typedef struct _fx_Nt6option1rR23K_form__kdefinterface_t {
   int tag;
   union {
      struct _fx_rR23K_form__kdefinterface_t_data_t* Some;
   } u;
} _fx_Nt6option1rR23K_form__kdefinterface_t;

typedef struct _fx_T2il {
   int_ t0;
   int64_t t1;
} _fx_T2il;

typedef struct _fx_T2iq {
   int_ t0;
   uint64_t t1;
} _fx_T2iq;

typedef struct _fx_T2id {
   int_ t0;
   double t1;
} _fx_T2id;

typedef struct _fx_N14K_form__klit_t {
   int tag;
   union {
      int64_t KLitInt;
      struct _fx_T2il KLitSInt;
      struct _fx_T2iq KLitUInt;
      struct _fx_T2id KLitFloat;
      fx_str_t KLitString;
      char_ KLitChar;
      bool KLitBool;
      struct _fx_N14K_form__ktyp_t_data_t* KLitNil;
   } u;
} _fx_N14K_form__klit_t;

typedef struct _fx_N14K_form__atom_t {
   int tag;
   union {
      struct _fx_R9Ast__id_t AtomId;
      struct _fx_N14K_form__klit_t AtomLit;
   } u;
} _fx_N14K_form__atom_t;

typedef struct _fx_Nt6option1N14K_form__atom_t {
   int tag;
   union {
      struct _fx_N14K_form__atom_t Some;
   } u;
} _fx_Nt6option1N14K_form__atom_t;

typedef struct _fx_LN14K_form__kexp_t_data_t {
   int_ rc;
   struct _fx_LN14K_form__kexp_t_data_t* tl;
   struct _fx_N14K_form__kexp_t_data_t* hd;
} _fx_LN14K_form__kexp_t_data_t, *_fx_LN14K_form__kexp_t;

typedef struct _fx_T2BN14K_form__atom_t {
   bool t0;
   struct _fx_N14K_form__atom_t t1;
} _fx_T2BN14K_form__atom_t;

typedef struct _fx_LT2BN14K_form__atom_t_data_t {
   int_ rc;
   struct _fx_LT2BN14K_form__atom_t_data_t* tl;
   struct _fx_T2BN14K_form__atom_t hd;
} _fx_LT2BN14K_form__atom_t_data_t, *_fx_LT2BN14K_form__atom_t;

typedef struct _fx_T2LN14K_form__ktyp_tN14K_form__ktyp_t {
   struct _fx_LN14K_form__ktyp_t_data_t* t0;
   struct _fx_N14K_form__ktyp_t_data_t* t1;
} _fx_T2LN14K_form__ktyp_tN14K_form__ktyp_t;

typedef struct _fx_T2R9Ast__id_tLT2R9Ast__id_tN14K_form__ktyp_t {
   struct _fx_R9Ast__id_t t0;
   struct _fx_LT2R9Ast__id_tN14K_form__ktyp_t_data_t* t1;
} _fx_T2R9Ast__id_tLT2R9Ast__id_tN14K_form__ktyp_t;

typedef struct _fx_T2iN14K_form__ktyp_t {
   int_ t0;
   struct _fx_N14K_form__ktyp_t_data_t* t1;
} _fx_T2iN14K_form__ktyp_t;

typedef struct _fx_N14K_form__ktyp_t_data_t {
   int_ rc;
   int tag;
   union {
      int_ KTypSInt;
      int_ KTypUInt;
      int_ KTypFloat;
      struct _fx_N14K_form__ktyp_t_data_t* KTypRawPointer;
      struct _fx_T2LN14K_form__ktyp_tN14K_form__ktyp_t KTypFun;
      struct _fx_LN14K_form__ktyp_t_data_t* KTypTuple;
      struct _fx_T2R9Ast__id_tLT2R9Ast__id_tN14K_form__ktyp_t KTypRecord;
      struct _fx_R9Ast__id_t KTypName;
      struct _fx_T2iN14K_form__ktyp_t KTypArray;
      struct _fx_N14K_form__ktyp_t_data_t* KTypVector;
      struct _fx_N14K_form__ktyp_t_data_t* KTypList;
      struct _fx_N14K_form__ktyp_t_data_t* KTypRef;
   } u;
} _fx_N14K_form__ktyp_t_data_t, *_fx_N14K_form__ktyp_t;

typedef struct _fx_Ta3N14K_form__atom_t {
   struct _fx_N14K_form__atom_t t0;
   struct _fx_N14K_form__atom_t t1;
   struct _fx_N14K_form__atom_t t2;
} _fx_Ta3N14K_form__atom_t;

typedef struct _fx_N13K_form__dom_t {
   int tag;
   union {
      struct _fx_N14K_form__atom_t DomainElem;
      struct _fx_N14K_form__atom_t DomainFast;
      struct _fx_Ta3N14K_form__atom_t DomainRange;
   } u;
} _fx_N13K_form__dom_t;

typedef struct _fx_T2Nt6option1N14K_form__atom_tR10Ast__loc_t {
   struct _fx_Nt6option1N14K_form__atom_t t0;
   struct _fx_R10Ast__loc_t t1;
} _fx_T2Nt6option1N14K_form__atom_tR10Ast__loc_t;

typedef struct _fx_T2N14K_form__ktyp_tR10Ast__loc_t {
   struct _fx_N14K_form__ktyp_t_data_t* t0;
   struct _fx_R10Ast__loc_t t1;
} _fx_T2N14K_form__ktyp_tR10Ast__loc_t;

typedef struct _fx_T2N14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t {
   struct _fx_N14K_form__atom_t t0;
   struct _fx_T2N14K_form__ktyp_tR10Ast__loc_t t1;
} _fx_T2N14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t;

typedef struct _fx_T4N13Ast__binary_tN14K_form__atom_tN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t {
   struct _fx_N13Ast__binary_t_data_t* t0;
   struct _fx_N14K_form__atom_t t1;
   struct _fx_N14K_form__atom_t t2;
   struct _fx_T2N14K_form__ktyp_tR10Ast__loc_t t3;
} _fx_T4N13Ast__binary_tN14K_form__atom_tN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t;

typedef struct _fx_T3N12Ast__unary_tN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t {
   struct _fx_N12Ast__unary_t t0;
   struct _fx_N14K_form__atom_t t1;
   struct _fx_T2N14K_form__ktyp_tR10Ast__loc_t t2;
} _fx_T3N12Ast__unary_tN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t;

typedef struct _fx_LN14K_form__atom_t_data_t {
   int_ rc;
   struct _fx_LN14K_form__atom_t_data_t* tl;
   struct _fx_N14K_form__atom_t hd;
} _fx_LN14K_form__atom_t_data_t, *_fx_LN14K_form__atom_t;

typedef struct _fx_T3N13Ast__intrin_tLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t {
   struct _fx_N13Ast__intrin_t t0;
   struct _fx_LN14K_form__atom_t_data_t* t1;
   struct _fx_T2N14K_form__ktyp_tR10Ast__loc_t t2;
} _fx_T3N13Ast__intrin_tLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t;

typedef struct _fx_T2R9Ast__id_tN14K_form__kexp_t {
   struct _fx_R9Ast__id_t t0;
   struct _fx_N14K_form__kexp_t_data_t* t1;
} _fx_T2R9Ast__id_tN14K_form__kexp_t;

typedef struct _fx_T2LN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t {
   struct _fx_LN14K_form__kexp_t_data_t* t0;
   struct _fx_T2N14K_form__ktyp_tR10Ast__loc_t t1;
} _fx_T2LN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t;

typedef struct _fx_T4N14K_form__kexp_tN14K_form__kexp_tN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t {
   struct _fx_N14K_form__kexp_t_data_t* t0;
   struct _fx_N14K_form__kexp_t_data_t* t1;
   struct _fx_N14K_form__kexp_t_data_t* t2;
   struct _fx_T2N14K_form__ktyp_tR10Ast__loc_t t3;
} _fx_T4N14K_form__kexp_tN14K_form__kexp_tN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t;

typedef struct _fx_T3R9Ast__id_tLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t {
   struct _fx_R9Ast__id_t t0;
   struct _fx_LN14K_form__atom_t_data_t* t1;
   struct _fx_T2N14K_form__ktyp_tR10Ast__loc_t t2;
} _fx_T3R9Ast__id_tLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t;

typedef struct _fx_T4R9Ast__id_tiLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t {
   struct _fx_R9Ast__id_t t0;
   int_ t1;
   struct _fx_LN14K_form__atom_t_data_t* t2;
   struct _fx_T2N14K_form__ktyp_tR10Ast__loc_t t3;
} _fx_T4R9Ast__id_tiLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t;

typedef struct _fx_T2LN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t {
   struct _fx_LN14K_form__atom_t_data_t* t0;
   struct _fx_T2N14K_form__ktyp_tR10Ast__loc_t t1;
} _fx_T2LN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t;

typedef struct _fx_T4R9Ast__id_tR9Ast__id_tLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t {
   struct _fx_R9Ast__id_t t0;
   struct _fx_R9Ast__id_t t1;
   struct _fx_LN14K_form__atom_t_data_t* t2;
   struct _fx_T2N14K_form__ktyp_tR10Ast__loc_t t3;
} _fx_T4R9Ast__id_tR9Ast__id_tLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t;

typedef struct _fx_LLT2BN14K_form__atom_t_data_t {
   int_ rc;
   struct _fx_LLT2BN14K_form__atom_t_data_t* tl;
   struct _fx_LT2BN14K_form__atom_t_data_t* hd;
} _fx_LLT2BN14K_form__atom_t_data_t, *_fx_LLT2BN14K_form__atom_t;

typedef struct _fx_T3BLLT2BN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t {
   bool t0;
   struct _fx_LLT2BN14K_form__atom_t_data_t* t1;
   struct _fx_T2N14K_form__ktyp_tR10Ast__loc_t t2;
} _fx_T3BLLT2BN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t;

typedef struct _fx_T2LT2BN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t {
   struct _fx_LT2BN14K_form__atom_t_data_t* t0;
   struct _fx_T2N14K_form__ktyp_tR10Ast__loc_t t1;
} _fx_T2LT2BN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t;

typedef struct _fx_LN13K_form__dom_t_data_t {
   int_ rc;
   struct _fx_LN13K_form__dom_t_data_t* tl;
   struct _fx_N13K_form__dom_t hd;
} _fx_LN13K_form__dom_t_data_t, *_fx_LN13K_form__dom_t;

typedef struct _fx_T5N14K_form__atom_tN13Ast__border_tN18Ast__interpolate_tLN13K_form__dom_tT2N14K_form__ktyp_tR10Ast__loc_t {
   struct _fx_N14K_form__atom_t t0;
   struct _fx_N13Ast__border_t t1;
   struct _fx_N18Ast__interpolate_t t2;
   struct _fx_LN13K_form__dom_t_data_t* t3;
   struct _fx_T2N14K_form__ktyp_tR10Ast__loc_t t4;
} _fx_T5N14K_form__atom_tN13Ast__border_tN18Ast__interpolate_tLN13K_form__dom_tT2N14K_form__ktyp_tR10Ast__loc_t;

typedef struct _fx_T3R9Ast__id_tiT2N14K_form__ktyp_tR10Ast__loc_t {
   struct _fx_R9Ast__id_t t0;
   int_ t1;
   struct _fx_T2N14K_form__ktyp_tR10Ast__loc_t t2;
} _fx_T3R9Ast__id_tiT2N14K_form__ktyp_tR10Ast__loc_t;

typedef struct _fx_T3R9Ast__id_tN14K_form__atom_tR10Ast__loc_t {
   struct _fx_R9Ast__id_t t0;
   struct _fx_N14K_form__atom_t t1;
   struct _fx_R10Ast__loc_t t2;
} _fx_T3R9Ast__id_tN14K_form__atom_tR10Ast__loc_t;

typedef struct _fx_T2LN14K_form__kexp_tN14K_form__kexp_t {
   struct _fx_LN14K_form__kexp_t_data_t* t0;
   struct _fx_N14K_form__kexp_t_data_t* t1;
} _fx_T2LN14K_form__kexp_tN14K_form__kexp_t;

typedef struct _fx_LT2LN14K_form__kexp_tN14K_form__kexp_t_data_t {
   int_ rc;
   struct _fx_LT2LN14K_form__kexp_tN14K_form__kexp_t_data_t* tl;
   struct _fx_T2LN14K_form__kexp_tN14K_form__kexp_t hd;
} _fx_LT2LN14K_form__kexp_tN14K_form__kexp_t_data_t, *_fx_LT2LN14K_form__kexp_tN14K_form__kexp_t;

typedef struct _fx_T2LT2LN14K_form__kexp_tN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t {
   struct _fx_LT2LN14K_form__kexp_tN14K_form__kexp_t_data_t* t0;
   struct _fx_T2N14K_form__ktyp_tR10Ast__loc_t t1;
} _fx_T2LT2LN14K_form__kexp_tN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t;

typedef struct _fx_T3N14K_form__kexp_tN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t {
   struct _fx_N14K_form__kexp_t_data_t* t0;
   struct _fx_N14K_form__kexp_t_data_t* t1;
   struct _fx_T2N14K_form__ktyp_tR10Ast__loc_t t2;
} _fx_T3N14K_form__kexp_tN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t;

typedef struct _fx_T3R9Ast__id_tBR10Ast__loc_t {
   struct _fx_R9Ast__id_t t0;
   bool t1;
   struct _fx_R10Ast__loc_t t2;
} _fx_T3R9Ast__id_tBR10Ast__loc_t;

typedef struct _fx_T3N14K_form__atom_tN14K_form__ktyp_tR10Ast__loc_t {
   struct _fx_N14K_form__atom_t t0;
   struct _fx_N14K_form__ktyp_t_data_t* t1;
   struct _fx_R10Ast__loc_t t2;
} _fx_T3N14K_form__atom_tN14K_form__ktyp_tR10Ast__loc_t;

typedef struct _fx_T2R9Ast__id_tN13K_form__dom_t {
   struct _fx_R9Ast__id_t t0;
   struct _fx_N13K_form__dom_t t1;
} _fx_T2R9Ast__id_tN13K_form__dom_t;

typedef struct _fx_LT2R9Ast__id_tN13K_form__dom_t_data_t {
   int_ rc;
   struct _fx_LT2R9Ast__id_tN13K_form__dom_t_data_t* tl;
   struct _fx_T2R9Ast__id_tN13K_form__dom_t hd;
} _fx_LT2R9Ast__id_tN13K_form__dom_t_data_t, *_fx_LT2R9Ast__id_tN13K_form__dom_t;

typedef struct _fx_T3N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_t {
   struct _fx_N14K_form__kexp_t_data_t* t0;
   struct _fx_LT2R9Ast__id_tN13K_form__dom_t_data_t* t1;
   struct _fx_LR9Ast__id_t_data_t* t2;
} _fx_T3N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_t;

typedef struct _fx_LT3N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_t_data_t {
   int_ rc;
   struct _fx_LT3N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_t_data_t* tl;
   struct _fx_T3N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_t hd;
} _fx_LT3N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_t_data_t, *_fx_LT3N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_t;

typedef struct _fx_T4LT3N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_tN14K_form__kexp_tR16Ast__for_flags_tT2N14K_form__ktyp_tR10Ast__loc_t {
   struct _fx_LT3N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_t_data_t* t0;
   struct _fx_N14K_form__kexp_t_data_t* t1;
   struct _fx_R16Ast__for_flags_t t2;
   struct _fx_T2N14K_form__ktyp_tR10Ast__loc_t t3;
} _fx_T4LT3N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_tN14K_form__kexp_tR16Ast__for_flags_tT2N14K_form__ktyp_tR10Ast__loc_t;

typedef struct _fx_T5LT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_tN14K_form__kexp_tR16Ast__for_flags_tR10Ast__loc_t {
   struct _fx_LT2R9Ast__id_tN13K_form__dom_t_data_t* t0;
   struct _fx_LR9Ast__id_t_data_t* t1;
   struct _fx_N14K_form__kexp_t_data_t* t2;
   struct _fx_R16Ast__for_flags_t t3;
   struct _fx_R10Ast__loc_t t4;
} _fx_T5LT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_tN14K_form__kexp_tR16Ast__for_flags_tR10Ast__loc_t;

typedef struct _fx_T3N14K_form__kexp_tN14K_form__kexp_tR10Ast__loc_t {
   struct _fx_N14K_form__kexp_t_data_t* t0;
   struct _fx_N14K_form__kexp_t_data_t* t1;
   struct _fx_R10Ast__loc_t t2;
} _fx_T3N14K_form__kexp_tN14K_form__kexp_tR10Ast__loc_t;

typedef struct _fx_T2ST2N14K_form__ktyp_tR10Ast__loc_t {
   fx_str_t t0;
   struct _fx_T2N14K_form__ktyp_tR10Ast__loc_t t1;
} _fx_T2ST2N14K_form__ktyp_tR10Ast__loc_t;

typedef struct _fx_T3R9Ast__id_tN14K_form__kexp_tR10Ast__loc_t {
   struct _fx_R9Ast__id_t t0;
   struct _fx_N14K_form__kexp_t_data_t* t1;
   struct _fx_R10Ast__loc_t t2;
} _fx_T3R9Ast__id_tN14K_form__kexp_tR10Ast__loc_t;

typedef struct _fx_N14K_form__kexp_t_data_t {
   int_ rc;
   int tag;
   union {
      struct _fx_R10Ast__loc_t KExpNop;
      struct _fx_R10Ast__loc_t KExpBreak;
      struct _fx_R10Ast__loc_t KExpContinue;
      struct _fx_T2Nt6option1N14K_form__atom_tR10Ast__loc_t KExpReturn;
      struct _fx_T2N14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t KExpAtom;
      struct _fx_T4N13Ast__binary_tN14K_form__atom_tN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t KExpBinary;
      struct _fx_T3N12Ast__unary_tN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t KExpUnary;
      struct _fx_T3N13Ast__intrin_tLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t KExpIntrin;
      struct _fx_T2R9Ast__id_tN14K_form__kexp_t KExpSync;
      struct _fx_T2LN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t KExpSeq;
      struct _fx_T4N14K_form__kexp_tN14K_form__kexp_tN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t KExpIf;
      struct _fx_T3R9Ast__id_tLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t KExpCall;
      struct _fx_T4R9Ast__id_tiLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t KExpICall;
      struct _fx_T2LN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t KExpMkTuple;
      struct _fx_T2LN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t KExpMkRecord;
      struct _fx_T4R9Ast__id_tR9Ast__id_tLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t KExpMkClosure;
      struct _fx_T3BLLT2BN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t KExpMkArray;
      struct _fx_T2LT2BN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t KExpMkVector;
      struct _fx_T5N14K_form__atom_tN13Ast__border_tN18Ast__interpolate_tLN13K_form__dom_tT2N14K_form__ktyp_tR10Ast__loc_t
         KExpAt;
      struct _fx_T3R9Ast__id_tiT2N14K_form__ktyp_tR10Ast__loc_t KExpMem;
      struct _fx_T3R9Ast__id_tN14K_form__atom_tR10Ast__loc_t KExpAssign;
      struct _fx_T2LT2LN14K_form__kexp_tN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t KExpMatch;
      struct _fx_T3N14K_form__kexp_tN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t KExpTryCatch;
      struct _fx_T3R9Ast__id_tBR10Ast__loc_t KExpThrow;
      struct _fx_T3N14K_form__atom_tN14K_form__ktyp_tR10Ast__loc_t KExpCast;
      struct _fx_T4LT3N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_tN14K_form__kexp_tR16Ast__for_flags_tT2N14K_form__ktyp_tR10Ast__loc_t
         KExpMap;
      struct _fx_T5LT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_tN14K_form__kexp_tR16Ast__for_flags_tR10Ast__loc_t KExpFor;
      struct _fx_T3N14K_form__kexp_tN14K_form__kexp_tR10Ast__loc_t KExpWhile;
      struct _fx_T3N14K_form__kexp_tN14K_form__kexp_tR10Ast__loc_t KExpDoWhile;
      struct _fx_T2ST2N14K_form__ktyp_tR10Ast__loc_t KExpCCode;
      struct _fx_T3R9Ast__id_tN14K_form__kexp_tR10Ast__loc_t KDefVal;
      struct _fx_rR17K_form__kdeffun_t_data_t* KDefFun;
      struct _fx_rR17K_form__kdefexn_t_data_t* KDefExn;
      struct _fx_rR21K_form__kdefvariant_t_data_t* KDefVariant;
      struct _fx_rR23K_form__kdefinterface_t_data_t* KDefInterface;
      struct _fx_rR17K_form__kdeftyp_t_data_t* KDefTyp;
      struct _fx_rR25K_form__kdefclosurevars_t_data_t* KDefClosureVars;
   } u;
} _fx_N14K_form__kexp_t_data_t, *_fx_N14K_form__kexp_t;

typedef struct _fx_T2LT2R9Ast__id_tN14K_form__ktyp_tLR9Ast__id_t {
   struct _fx_LT2R9Ast__id_tN14K_form__ktyp_t_data_t* t0;
   struct _fx_LR9Ast__id_t_data_t* t1;
} _fx_T2LT2R9Ast__id_tN14K_form__ktyp_tLR9Ast__id_t;

typedef struct _fx_R14Ast__pragmas_t {
   bool pragma_cpp;
   struct _fx_LT2SR10Ast__loc_t_data_t* pragma_clibs;
} _fx_R14Ast__pragmas_t;

typedef struct _fx_R17K_form__kmodule_t {
   struct _fx_R9Ast__id_t km_name;
   int_ km_idx;
   int_ km_toposort_idx;
   fx_str_t km_cname;
   struct _fx_LN14K_form__kexp_t_data_t* km_top;
   struct _fx_Li_data_t* km_deps;
   bool km_skip;
   bool km_main;
   struct _fx_R14Ast__pragmas_t km_pragmas;
} _fx_R17K_form__kmodule_t;

typedef struct _fx_Ta2S {
   fx_str_t t0;
   fx_str_t t1;
} _fx_Ta2S;

typedef struct _fx_LR17K_form__kmodule_t_data_t {
   int_ rc;
   struct _fx_LR17K_form__kmodule_t_data_t* tl;
   struct _fx_R17K_form__kmodule_t hd;
} _fx_LR17K_form__kmodule_t_data_t, *_fx_LR17K_form__kmodule_t;

typedef struct {
   int_ rc;
   int_ data;
} _fx_E4Exit_data_t;

typedef struct {
   int_ rc;
   fx_str_t data;
} _fx_E4Fail_data_t;

typedef struct {
   int_ rc;
   struct _fx_T2Ta2iS data;
} _fx_E22LexerUtils__LexerError_data_t;

typedef struct {
   int_ rc;
   struct _fx_T2R10Ast__loc_tS data;
} _fx_E17Ast__CompileError_data_t;

typedef struct {
   int_ rc;
   struct _fx_T2R10Ast__loc_tS data;
} _fx_E18Parser__ParseError_data_t;

static void _fx_free_LS(struct _fx_LS_data_t** dst)
{
   FX_FREE_LIST_IMPL(_fx_LS, fx_free_str);
}

static int _fx_cons_LS(fx_str_t* hd, struct _fx_LS_data_t* tl, bool addref_tl, struct _fx_LS_data_t** fx_result)
{
   FX_MAKE_LIST_IMPL(_fx_LS, fx_copy_str);
}

static void _fx_free_R7File__t(struct _fx_R7File__t* dst)
{
   fx_free_cptr(&dst->handle);
}

static void _fx_copy_R7File__t(struct _fx_R7File__t* src, struct _fx_R7File__t* dst)
{
   fx_copy_cptr(src->handle, &dst->handle);
}

static void _fx_make_R7File__t(fx_cptr_t r_handle, struct _fx_R7File__t* fx_result)
{
   fx_copy_cptr(r_handle, &fx_result->handle);
}

static void _fx_free_T2Ta2iS(struct _fx_T2Ta2iS* dst)
{
   fx_free_str(&dst->t1);
}

static void _fx_copy_T2Ta2iS(struct _fx_T2Ta2iS* src, struct _fx_T2Ta2iS* dst)
{
   dst->t0 = src->t0;
   fx_copy_str(&src->t1, &dst->t1);
}

static void _fx_make_T2Ta2iS(struct _fx_Ta2i* t0, fx_str_t* t1, struct _fx_T2Ta2iS* fx_result)
{
   fx_result->t0 = *t0;
   fx_copy_str(t1, &fx_result->t1);
}

static int _fx_cons_LN12Ast__scope_t(
   struct _fx_N12Ast__scope_t* hd,
   struct _fx_LN12Ast__scope_t_data_t* tl,
   bool addref_tl,
   struct _fx_LN12Ast__scope_t_data_t** fx_result)
{
   FX_MAKE_LIST_IMPL(_fx_LN12Ast__scope_t, FX_COPY_SIMPLE_BY_PTR);
}

static int _fx_cons_LR9Ast__id_t(
   struct _fx_R9Ast__id_t* hd,
   struct _fx_LR9Ast__id_t_data_t* tl,
   bool addref_tl,
   struct _fx_LR9Ast__id_t_data_t** fx_result)
{
   FX_MAKE_LIST_IMPL(_fx_LR9Ast__id_t, FX_COPY_SIMPLE_BY_PTR);
}

static void _fx_free_R16Ast__val_flags_t(struct _fx_R16Ast__val_flags_t* dst)
{
   fx_free_list_simple(&dst->val_flag_global);
}

static void _fx_copy_R16Ast__val_flags_t(struct _fx_R16Ast__val_flags_t* src, struct _fx_R16Ast__val_flags_t* dst)
{
   dst->val_flag_arg = src->val_flag_arg;
   dst->val_flag_mutable = src->val_flag_mutable;
   dst->val_flag_temp = src->val_flag_temp;
   dst->val_flag_tempref = src->val_flag_tempref;
   dst->val_flag_private = src->val_flag_private;
   dst->val_flag_subarray = src->val_flag_subarray;
   dst->val_flag_instance = src->val_flag_instance;
   dst->val_flag_method = src->val_flag_method;
   dst->val_flag_ctor = src->val_flag_ctor;
   FX_COPY_PTR(src->val_flag_global, &dst->val_flag_global);
}

static void _fx_make_R16Ast__val_flags_t(
   bool r_val_flag_arg,
   bool r_val_flag_mutable,
   bool r_val_flag_temp,
   bool r_val_flag_tempref,
   bool r_val_flag_private,
   bool r_val_flag_subarray,
   bool r_val_flag_instance,
   struct _fx_T2R9Ast__id_ti* r_val_flag_method,
   int_ r_val_flag_ctor,
   struct _fx_LN12Ast__scope_t_data_t* r_val_flag_global,
   struct _fx_R16Ast__val_flags_t* fx_result)
{
   fx_result->val_flag_arg = r_val_flag_arg;
   fx_result->val_flag_mutable = r_val_flag_mutable;
   fx_result->val_flag_temp = r_val_flag_temp;
   fx_result->val_flag_tempref = r_val_flag_tempref;
   fx_result->val_flag_private = r_val_flag_private;
   fx_result->val_flag_subarray = r_val_flag_subarray;
   fx_result->val_flag_instance = r_val_flag_instance;
   fx_result->val_flag_method = *r_val_flag_method;
   fx_result->val_flag_ctor = r_val_flag_ctor;
   FX_COPY_PTR(r_val_flag_global, &fx_result->val_flag_global);
}

static void _fx_free_R17K_form__kdefval_t(struct _fx_R17K_form__kdefval_t* dst)
{
   fx_free_str(&dst->kv_cname);
   _fx_free_N14K_form__ktyp_t(&dst->kv_typ);
   _fx_free_R16Ast__val_flags_t(&dst->kv_flags);
}

static void _fx_copy_R17K_form__kdefval_t(struct _fx_R17K_form__kdefval_t* src, struct _fx_R17K_form__kdefval_t* dst)
{
   dst->kv_name = src->kv_name;
   fx_copy_str(&src->kv_cname, &dst->kv_cname);
   FX_COPY_PTR(src->kv_typ, &dst->kv_typ);
   _fx_copy_R16Ast__val_flags_t(&src->kv_flags, &dst->kv_flags);
   dst->kv_loc = src->kv_loc;
}

static void _fx_make_R17K_form__kdefval_t(
   struct _fx_R9Ast__id_t* r_kv_name,
   fx_str_t* r_kv_cname,
   struct _fx_N14K_form__ktyp_t_data_t* r_kv_typ,
   struct _fx_R16Ast__val_flags_t* r_kv_flags,
   struct _fx_R10Ast__loc_t* r_kv_loc,
   struct _fx_R17K_form__kdefval_t* fx_result)
{
   fx_result->kv_name = *r_kv_name;
   fx_copy_str(r_kv_cname, &fx_result->kv_cname);
   FX_COPY_PTR(r_kv_typ, &fx_result->kv_typ);
   _fx_copy_R16Ast__val_flags_t(r_kv_flags, &fx_result->kv_flags);
   fx_result->kv_loc = *r_kv_loc;
}

static void _fx_free_T2R9Ast__id_tN14K_form__ktyp_t(struct _fx_T2R9Ast__id_tN14K_form__ktyp_t* dst)
{
   _fx_free_N14K_form__ktyp_t(&dst->t1);
}

static void _fx_copy_T2R9Ast__id_tN14K_form__ktyp_t(
   struct _fx_T2R9Ast__id_tN14K_form__ktyp_t* src,
   struct _fx_T2R9Ast__id_tN14K_form__ktyp_t* dst)
{
   dst->t0 = src->t0;
   FX_COPY_PTR(src->t1, &dst->t1);
}

static void _fx_make_T2R9Ast__id_tN14K_form__ktyp_t(
   struct _fx_R9Ast__id_t* t0,
   struct _fx_N14K_form__ktyp_t_data_t* t1,
   struct _fx_T2R9Ast__id_tN14K_form__ktyp_t* fx_result)
{
   fx_result->t0 = *t0;
   FX_COPY_PTR(t1, &fx_result->t1);
}

static void _fx_free_LT2R9Ast__id_tN14K_form__ktyp_t(struct _fx_LT2R9Ast__id_tN14K_form__ktyp_t_data_t** dst)
{
   FX_FREE_LIST_IMPL(_fx_LT2R9Ast__id_tN14K_form__ktyp_t, _fx_free_T2R9Ast__id_tN14K_form__ktyp_t);
}

static int _fx_cons_LT2R9Ast__id_tN14K_form__ktyp_t(
   struct _fx_T2R9Ast__id_tN14K_form__ktyp_t* hd,
   struct _fx_LT2R9Ast__id_tN14K_form__ktyp_t_data_t* tl,
   bool addref_tl,
   struct _fx_LT2R9Ast__id_tN14K_form__ktyp_t_data_t** fx_result)
{
   FX_MAKE_LIST_IMPL(_fx_LT2R9Ast__id_tN14K_form__ktyp_t, _fx_copy_T2R9Ast__id_tN14K_form__ktyp_t);
}

static void _fx_free_R23K_form__kdefinterface_t(struct _fx_R23K_form__kdefinterface_t* dst)
{
   fx_free_str(&dst->ki_cname);
   _fx_free_LT2R9Ast__id_tN14K_form__ktyp_t(&dst->ki_all_methods);
   fx_free_list_simple(&dst->ki_scope);
}

static void _fx_copy_R23K_form__kdefinterface_t(
   struct _fx_R23K_form__kdefinterface_t* src,
   struct _fx_R23K_form__kdefinterface_t* dst)
{
   dst->ki_name = src->ki_name;
   dst->ki_base = src->ki_base;
   fx_copy_str(&src->ki_cname, &dst->ki_cname);
   dst->ki_id = src->ki_id;
   FX_COPY_PTR(src->ki_all_methods, &dst->ki_all_methods);
   FX_COPY_PTR(src->ki_scope, &dst->ki_scope);
   dst->ki_loc = src->ki_loc;
}

static void _fx_make_R23K_form__kdefinterface_t(
   struct _fx_R9Ast__id_t* r_ki_name,
   struct _fx_R9Ast__id_t* r_ki_base,
   fx_str_t* r_ki_cname,
   struct _fx_R9Ast__id_t* r_ki_id,
   struct _fx_LT2R9Ast__id_tN14K_form__ktyp_t_data_t* r_ki_all_methods,
   struct _fx_LN12Ast__scope_t_data_t* r_ki_scope,
   struct _fx_R10Ast__loc_t* r_ki_loc,
   struct _fx_R23K_form__kdefinterface_t* fx_result)
{
   fx_result->ki_name = *r_ki_name;
   fx_result->ki_base = *r_ki_base;
   fx_copy_str(r_ki_cname, &fx_result->ki_cname);
   fx_result->ki_id = *r_ki_id;
   FX_COPY_PTR(r_ki_all_methods, &fx_result->ki_all_methods);
   FX_COPY_PTR(r_ki_scope, &fx_result->ki_scope);
   fx_result->ki_loc = *r_ki_loc;
}

static void _fx_free_rR23K_form__kdefinterface_t(struct _fx_rR23K_form__kdefinterface_t_data_t** dst)
{
   FX_FREE_REF_IMPL(_fx_rR23K_form__kdefinterface_t, _fx_free_R23K_form__kdefinterface_t);
}

static int _fx_make_rR23K_form__kdefinterface_t(
   struct _fx_R23K_form__kdefinterface_t* arg,
   struct _fx_rR23K_form__kdefinterface_t_data_t** fx_result)
{
   FX_MAKE_REF_IMPL(_fx_rR23K_form__kdefinterface_t, _fx_copy_R23K_form__kdefinterface_t);
}

static void _fx_free_R17K_form__kdeffun_t(struct _fx_R17K_form__kdeffun_t* dst)
{
   fx_free_str(&dst->kf_cname);
   fx_free_list_simple(&dst->kf_params);
   _fx_free_N14K_form__ktyp_t(&dst->kf_rt);
   _fx_free_N14K_form__kexp_t(&dst->kf_body);
   fx_free_list_simple(&dst->kf_scope);
}

static void _fx_copy_R17K_form__kdeffun_t(struct _fx_R17K_form__kdeffun_t* src, struct _fx_R17K_form__kdeffun_t* dst)
{
   dst->kf_name = src->kf_name;
   fx_copy_str(&src->kf_cname, &dst->kf_cname);
   FX_COPY_PTR(src->kf_params, &dst->kf_params);
   FX_COPY_PTR(src->kf_rt, &dst->kf_rt);
   FX_COPY_PTR(src->kf_body, &dst->kf_body);
   dst->kf_flags = src->kf_flags;
   dst->kf_closure = src->kf_closure;
   FX_COPY_PTR(src->kf_scope, &dst->kf_scope);
   dst->kf_loc = src->kf_loc;
}

static void _fx_make_R17K_form__kdeffun_t(
   struct _fx_R9Ast__id_t* r_kf_name,
   fx_str_t* r_kf_cname,
   struct _fx_LR9Ast__id_t_data_t* r_kf_params,
   struct _fx_N14K_form__ktyp_t_data_t* r_kf_rt,
   struct _fx_N14K_form__kexp_t_data_t* r_kf_body,
   struct _fx_R16Ast__fun_flags_t* r_kf_flags,
   struct _fx_R25K_form__kdefclosureinfo_t* r_kf_closure,
   struct _fx_LN12Ast__scope_t_data_t* r_kf_scope,
   struct _fx_R10Ast__loc_t* r_kf_loc,
   struct _fx_R17K_form__kdeffun_t* fx_result)
{
   fx_result->kf_name = *r_kf_name;
   fx_copy_str(r_kf_cname, &fx_result->kf_cname);
   FX_COPY_PTR(r_kf_params, &fx_result->kf_params);
   FX_COPY_PTR(r_kf_rt, &fx_result->kf_rt);
   FX_COPY_PTR(r_kf_body, &fx_result->kf_body);
   fx_result->kf_flags = *r_kf_flags;
   fx_result->kf_closure = *r_kf_closure;
   FX_COPY_PTR(r_kf_scope, &fx_result->kf_scope);
   fx_result->kf_loc = *r_kf_loc;
}

static void _fx_free_rR17K_form__kdeffun_t(struct _fx_rR17K_form__kdeffun_t_data_t** dst)
{
   FX_FREE_REF_IMPL(_fx_rR17K_form__kdeffun_t, _fx_free_R17K_form__kdeffun_t);
}

static int _fx_make_rR17K_form__kdeffun_t(
   struct _fx_R17K_form__kdeffun_t* arg,
   struct _fx_rR17K_form__kdeffun_t_data_t** fx_result)
{
   FX_MAKE_REF_IMPL(_fx_rR17K_form__kdeffun_t, _fx_copy_R17K_form__kdeffun_t);
}

static void _fx_free_R17K_form__kdefexn_t(struct _fx_R17K_form__kdefexn_t* dst)
{
   fx_free_str(&dst->ke_cname);
   fx_free_str(&dst->ke_base_cname);
   _fx_free_N14K_form__ktyp_t(&dst->ke_typ);
   fx_free_list_simple(&dst->ke_scope);
}

static void _fx_copy_R17K_form__kdefexn_t(struct _fx_R17K_form__kdefexn_t* src, struct _fx_R17K_form__kdefexn_t* dst)
{
   dst->ke_name = src->ke_name;
   fx_copy_str(&src->ke_cname, &dst->ke_cname);
   fx_copy_str(&src->ke_base_cname, &dst->ke_base_cname);
   FX_COPY_PTR(src->ke_typ, &dst->ke_typ);
   dst->ke_std = src->ke_std;
   dst->ke_tag = src->ke_tag;
   dst->ke_make = src->ke_make;
   FX_COPY_PTR(src->ke_scope, &dst->ke_scope);
   dst->ke_loc = src->ke_loc;
}

static void _fx_make_R17K_form__kdefexn_t(
   struct _fx_R9Ast__id_t* r_ke_name,
   fx_str_t* r_ke_cname,
   fx_str_t* r_ke_base_cname,
   struct _fx_N14K_form__ktyp_t_data_t* r_ke_typ,
   bool r_ke_std,
   struct _fx_R9Ast__id_t* r_ke_tag,
   struct _fx_R9Ast__id_t* r_ke_make,
   struct _fx_LN12Ast__scope_t_data_t* r_ke_scope,
   struct _fx_R10Ast__loc_t* r_ke_loc,
   struct _fx_R17K_form__kdefexn_t* fx_result)
{
   fx_result->ke_name = *r_ke_name;
   fx_copy_str(r_ke_cname, &fx_result->ke_cname);
   fx_copy_str(r_ke_base_cname, &fx_result->ke_base_cname);
   FX_COPY_PTR(r_ke_typ, &fx_result->ke_typ);
   fx_result->ke_std = r_ke_std;
   fx_result->ke_tag = *r_ke_tag;
   fx_result->ke_make = *r_ke_make;
   FX_COPY_PTR(r_ke_scope, &fx_result->ke_scope);
   fx_result->ke_loc = *r_ke_loc;
}

static void _fx_free_rR17K_form__kdefexn_t(struct _fx_rR17K_form__kdefexn_t_data_t** dst)
{
   FX_FREE_REF_IMPL(_fx_rR17K_form__kdefexn_t, _fx_free_R17K_form__kdefexn_t);
}

static int _fx_make_rR17K_form__kdefexn_t(
   struct _fx_R17K_form__kdefexn_t* arg,
   struct _fx_rR17K_form__kdefexn_t_data_t** fx_result)
{
   FX_MAKE_REF_IMPL(_fx_rR17K_form__kdefexn_t, _fx_copy_R17K_form__kdefexn_t);
}

static void _fx_free_LN14K_form__ktyp_t(struct _fx_LN14K_form__ktyp_t_data_t** dst)
{
   FX_FREE_LIST_IMPL(_fx_LN14K_form__ktyp_t, _fx_free_N14K_form__ktyp_t);
}

static int _fx_cons_LN14K_form__ktyp_t(
   struct _fx_N14K_form__ktyp_t_data_t* hd,
   struct _fx_LN14K_form__ktyp_t_data_t* tl,
   bool addref_tl,
   struct _fx_LN14K_form__ktyp_t_data_t** fx_result)
{
   FX_MAKE_LIST_IMPL(_fx_LN14K_form__ktyp_t, FX_COPY_PTR);
}

static void _fx_free_T2R9Ast__id_tLR9Ast__id_t(struct _fx_T2R9Ast__id_tLR9Ast__id_t* dst)
{
   fx_free_list_simple(&dst->t1);
}

static void _fx_copy_T2R9Ast__id_tLR9Ast__id_t(
   struct _fx_T2R9Ast__id_tLR9Ast__id_t* src,
   struct _fx_T2R9Ast__id_tLR9Ast__id_t* dst)
{
   dst->t0 = src->t0;
   FX_COPY_PTR(src->t1, &dst->t1);
}

static void _fx_make_T2R9Ast__id_tLR9Ast__id_t(
   struct _fx_R9Ast__id_t* t0,
   struct _fx_LR9Ast__id_t_data_t* t1,
   struct _fx_T2R9Ast__id_tLR9Ast__id_t* fx_result)
{
   fx_result->t0 = *t0;
   FX_COPY_PTR(t1, &fx_result->t1);
}

static void _fx_free_LT2R9Ast__id_tLR9Ast__id_t(struct _fx_LT2R9Ast__id_tLR9Ast__id_t_data_t** dst)
{
   FX_FREE_LIST_IMPL(_fx_LT2R9Ast__id_tLR9Ast__id_t, _fx_free_T2R9Ast__id_tLR9Ast__id_t);
}

static int _fx_cons_LT2R9Ast__id_tLR9Ast__id_t(
   struct _fx_T2R9Ast__id_tLR9Ast__id_t* hd,
   struct _fx_LT2R9Ast__id_tLR9Ast__id_t_data_t* tl,
   bool addref_tl,
   struct _fx_LT2R9Ast__id_tLR9Ast__id_t_data_t** fx_result)
{
   FX_MAKE_LIST_IMPL(_fx_LT2R9Ast__id_tLR9Ast__id_t, _fx_copy_T2R9Ast__id_tLR9Ast__id_t);
}

static void _fx_free_R21K_form__kdefvariant_t(struct _fx_R21K_form__kdefvariant_t* dst)
{
   fx_free_str(&dst->kvar_cname);
   _fx_free_LN14K_form__ktyp_t(&dst->kvar_targs);
   _fx_free_LT2R9Ast__id_tN14K_form__ktyp_t(&dst->kvar_cases);
   fx_free_list_simple(&dst->kvar_ctors);
   _fx_free_LT2R9Ast__id_tLR9Ast__id_t(&dst->kvar_ifaces);
   fx_free_list_simple(&dst->kvar_scope);
}

static void _fx_copy_R21K_form__kdefvariant_t(
   struct _fx_R21K_form__kdefvariant_t* src,
   struct _fx_R21K_form__kdefvariant_t* dst)
{
   dst->kvar_name = src->kvar_name;
   fx_copy_str(&src->kvar_cname, &dst->kvar_cname);
   dst->kvar_proto = src->kvar_proto;
   dst->kvar_props = src->kvar_props;
   FX_COPY_PTR(src->kvar_targs, &dst->kvar_targs);
   FX_COPY_PTR(src->kvar_cases, &dst->kvar_cases);
   FX_COPY_PTR(src->kvar_ctors, &dst->kvar_ctors);
   dst->kvar_flags = src->kvar_flags;
   FX_COPY_PTR(src->kvar_ifaces, &dst->kvar_ifaces);
   FX_COPY_PTR(src->kvar_scope, &dst->kvar_scope);
   dst->kvar_loc = src->kvar_loc;
}

static void _fx_make_R21K_form__kdefvariant_t(
   struct _fx_R9Ast__id_t* r_kvar_name,
   fx_str_t* r_kvar_cname,
   struct _fx_R9Ast__id_t* r_kvar_proto,
   struct _fx_Nt6option1R17K_form__ktprops_t* r_kvar_props,
   struct _fx_LN14K_form__ktyp_t_data_t* r_kvar_targs,
   struct _fx_LT2R9Ast__id_tN14K_form__ktyp_t_data_t* r_kvar_cases,
   struct _fx_LR9Ast__id_t_data_t* r_kvar_ctors,
   struct _fx_R16Ast__var_flags_t* r_kvar_flags,
   struct _fx_LT2R9Ast__id_tLR9Ast__id_t_data_t* r_kvar_ifaces,
   struct _fx_LN12Ast__scope_t_data_t* r_kvar_scope,
   struct _fx_R10Ast__loc_t* r_kvar_loc,
   struct _fx_R21K_form__kdefvariant_t* fx_result)
{
   fx_result->kvar_name = *r_kvar_name;
   fx_copy_str(r_kvar_cname, &fx_result->kvar_cname);
   fx_result->kvar_proto = *r_kvar_proto;
   fx_result->kvar_props = *r_kvar_props;
   FX_COPY_PTR(r_kvar_targs, &fx_result->kvar_targs);
   FX_COPY_PTR(r_kvar_cases, &fx_result->kvar_cases);
   FX_COPY_PTR(r_kvar_ctors, &fx_result->kvar_ctors);
   fx_result->kvar_flags = *r_kvar_flags;
   FX_COPY_PTR(r_kvar_ifaces, &fx_result->kvar_ifaces);
   FX_COPY_PTR(r_kvar_scope, &fx_result->kvar_scope);
   fx_result->kvar_loc = *r_kvar_loc;
}

static void _fx_free_rR21K_form__kdefvariant_t(struct _fx_rR21K_form__kdefvariant_t_data_t** dst)
{
   FX_FREE_REF_IMPL(_fx_rR21K_form__kdefvariant_t, _fx_free_R21K_form__kdefvariant_t);
}

static int _fx_make_rR21K_form__kdefvariant_t(
   struct _fx_R21K_form__kdefvariant_t* arg,
   struct _fx_rR21K_form__kdefvariant_t_data_t** fx_result)
{
   FX_MAKE_REF_IMPL(_fx_rR21K_form__kdefvariant_t, _fx_copy_R21K_form__kdefvariant_t);
}

static void _fx_free_R17K_form__kdeftyp_t(struct _fx_R17K_form__kdeftyp_t* dst)
{
   fx_free_str(&dst->kt_cname);
   _fx_free_LN14K_form__ktyp_t(&dst->kt_targs);
   _fx_free_N14K_form__ktyp_t(&dst->kt_typ);
   fx_free_list_simple(&dst->kt_scope);
}

static void _fx_copy_R17K_form__kdeftyp_t(struct _fx_R17K_form__kdeftyp_t* src, struct _fx_R17K_form__kdeftyp_t* dst)
{
   dst->kt_name = src->kt_name;
   fx_copy_str(&src->kt_cname, &dst->kt_cname);
   dst->kt_proto = src->kt_proto;
   dst->kt_props = src->kt_props;
   FX_COPY_PTR(src->kt_targs, &dst->kt_targs);
   FX_COPY_PTR(src->kt_typ, &dst->kt_typ);
   FX_COPY_PTR(src->kt_scope, &dst->kt_scope);
   dst->kt_loc = src->kt_loc;
}

static void _fx_make_R17K_form__kdeftyp_t(
   struct _fx_R9Ast__id_t* r_kt_name,
   fx_str_t* r_kt_cname,
   struct _fx_R9Ast__id_t* r_kt_proto,
   struct _fx_Nt6option1R17K_form__ktprops_t* r_kt_props,
   struct _fx_LN14K_form__ktyp_t_data_t* r_kt_targs,
   struct _fx_N14K_form__ktyp_t_data_t* r_kt_typ,
   struct _fx_LN12Ast__scope_t_data_t* r_kt_scope,
   struct _fx_R10Ast__loc_t* r_kt_loc,
   struct _fx_R17K_form__kdeftyp_t* fx_result)
{
   fx_result->kt_name = *r_kt_name;
   fx_copy_str(r_kt_cname, &fx_result->kt_cname);
   fx_result->kt_proto = *r_kt_proto;
   fx_result->kt_props = *r_kt_props;
   FX_COPY_PTR(r_kt_targs, &fx_result->kt_targs);
   FX_COPY_PTR(r_kt_typ, &fx_result->kt_typ);
   FX_COPY_PTR(r_kt_scope, &fx_result->kt_scope);
   fx_result->kt_loc = *r_kt_loc;
}

static void _fx_free_rR17K_form__kdeftyp_t(struct _fx_rR17K_form__kdeftyp_t_data_t** dst)
{
   FX_FREE_REF_IMPL(_fx_rR17K_form__kdeftyp_t, _fx_free_R17K_form__kdeftyp_t);
}

static int _fx_make_rR17K_form__kdeftyp_t(
   struct _fx_R17K_form__kdeftyp_t* arg,
   struct _fx_rR17K_form__kdeftyp_t_data_t** fx_result)
{
   FX_MAKE_REF_IMPL(_fx_rR17K_form__kdeftyp_t, _fx_copy_R17K_form__kdeftyp_t);
}

static void _fx_free_R25K_form__kdefclosurevars_t(struct _fx_R25K_form__kdefclosurevars_t* dst)
{
   fx_free_str(&dst->kcv_cname);
   _fx_free_LT2R9Ast__id_tN14K_form__ktyp_t(&dst->kcv_freevars);
   fx_free_list_simple(&dst->kcv_orig_freevars);
   fx_free_list_simple(&dst->kcv_scope);
}

static void _fx_copy_R25K_form__kdefclosurevars_t(
   struct _fx_R25K_form__kdefclosurevars_t* src,
   struct _fx_R25K_form__kdefclosurevars_t* dst)
{
   dst->kcv_name = src->kcv_name;
   fx_copy_str(&src->kcv_cname, &dst->kcv_cname);
   FX_COPY_PTR(src->kcv_freevars, &dst->kcv_freevars);
   FX_COPY_PTR(src->kcv_orig_freevars, &dst->kcv_orig_freevars);
   FX_COPY_PTR(src->kcv_scope, &dst->kcv_scope);
   dst->kcv_loc = src->kcv_loc;
}

static void _fx_make_R25K_form__kdefclosurevars_t(
   struct _fx_R9Ast__id_t* r_kcv_name,
   fx_str_t* r_kcv_cname,
   struct _fx_LT2R9Ast__id_tN14K_form__ktyp_t_data_t* r_kcv_freevars,
   struct _fx_LR9Ast__id_t_data_t* r_kcv_orig_freevars,
   struct _fx_LN12Ast__scope_t_data_t* r_kcv_scope,
   struct _fx_R10Ast__loc_t* r_kcv_loc,
   struct _fx_R25K_form__kdefclosurevars_t* fx_result)
{
   fx_result->kcv_name = *r_kcv_name;
   fx_copy_str(r_kcv_cname, &fx_result->kcv_cname);
   FX_COPY_PTR(r_kcv_freevars, &fx_result->kcv_freevars);
   FX_COPY_PTR(r_kcv_orig_freevars, &fx_result->kcv_orig_freevars);
   FX_COPY_PTR(r_kcv_scope, &fx_result->kcv_scope);
   fx_result->kcv_loc = *r_kcv_loc;
}

static void _fx_free_rR25K_form__kdefclosurevars_t(struct _fx_rR25K_form__kdefclosurevars_t_data_t** dst)
{
   FX_FREE_REF_IMPL(_fx_rR25K_form__kdefclosurevars_t, _fx_free_R25K_form__kdefclosurevars_t);
}

static int _fx_make_rR25K_form__kdefclosurevars_t(
   struct _fx_R25K_form__kdefclosurevars_t* arg,
   struct _fx_rR25K_form__kdefclosurevars_t_data_t** fx_result)
{
   FX_MAKE_REF_IMPL(_fx_rR25K_form__kdefclosurevars_t, _fx_copy_R25K_form__kdefclosurevars_t);
}

static void _fx_free_N15K_form__kinfo_t(struct _fx_N15K_form__kinfo_t* dst)
{
   switch (dst->tag) {
   case 2:
      _fx_free_R17K_form__kdefval_t(&dst->u.KVal); break;
   case 3:
      _fx_free_rR17K_form__kdeffun_t(&dst->u.KFun); break;
   case 4:
      _fx_free_rR17K_form__kdefexn_t(&dst->u.KExn); break;
   case 5:
      _fx_free_rR21K_form__kdefvariant_t(&dst->u.KVariant); break;
   case 6:
      _fx_free_rR25K_form__kdefclosurevars_t(&dst->u.KClosureVars); break;
   case 7:
      _fx_free_rR23K_form__kdefinterface_t(&dst->u.KInterface); break;
   case 8:
      _fx_free_rR17K_form__kdeftyp_t(&dst->u.KTyp); break;
   default:
      ;
   }
   dst->tag = 0;
}

static void _fx_copy_N15K_form__kinfo_t(struct _fx_N15K_form__kinfo_t* src, struct _fx_N15K_form__kinfo_t* dst)
{
   dst->tag = src->tag;
   switch (src->tag) {
   case 2:
      _fx_copy_R17K_form__kdefval_t(&src->u.KVal, &dst->u.KVal); break;
   case 3:
      FX_COPY_PTR(src->u.KFun, &dst->u.KFun); break;
   case 4:
      FX_COPY_PTR(src->u.KExn, &dst->u.KExn); break;
   case 5:
      FX_COPY_PTR(src->u.KVariant, &dst->u.KVariant); break;
   case 6:
      FX_COPY_PTR(src->u.KClosureVars, &dst->u.KClosureVars); break;
   case 7:
      FX_COPY_PTR(src->u.KInterface, &dst->u.KInterface); break;
   case 8:
      FX_COPY_PTR(src->u.KTyp, &dst->u.KTyp); break;
   default:
      dst->u = src->u;
   }
}

static void _fx_free_T2R10Ast__loc_tS(struct _fx_T2R10Ast__loc_tS* dst)
{
   fx_free_str(&dst->t1);
}

static void _fx_copy_T2R10Ast__loc_tS(struct _fx_T2R10Ast__loc_tS* src, struct _fx_T2R10Ast__loc_tS* dst)
{
   dst->t0 = src->t0;
   fx_copy_str(&src->t1, &dst->t1);
}

static void _fx_make_T2R10Ast__loc_tS(struct _fx_R10Ast__loc_t* t0, fx_str_t* t1, struct _fx_T2R10Ast__loc_tS* fx_result)
{
   fx_result->t0 = *t0;
   fx_copy_str(t1, &fx_result->t1);
}

static void _fx_free_N13Ast__binary_t(struct _fx_N13Ast__binary_t_data_t** dst)
{
   if (*dst && FX_DECREF((*dst)->rc) == 1) {
      switch ((*dst)->tag) {
      case 27:
         _fx_free_N13Ast__binary_t(&(*dst)->u.OpAugBinary); break;
      default:
         ;
      }
      fx_free(*dst);
   }
   *dst = 0;
}

static void _fx_free_T2SR10Ast__loc_t(struct _fx_T2SR10Ast__loc_t* dst)
{
   fx_free_str(&dst->t0);
}

static void _fx_copy_T2SR10Ast__loc_t(struct _fx_T2SR10Ast__loc_t* src, struct _fx_T2SR10Ast__loc_t* dst)
{
   fx_copy_str(&src->t0, &dst->t0);
   dst->t1 = src->t1;
}

static void _fx_make_T2SR10Ast__loc_t(fx_str_t* t0, struct _fx_R10Ast__loc_t* t1, struct _fx_T2SR10Ast__loc_t* fx_result)
{
   fx_copy_str(t0, &fx_result->t0);
   fx_result->t1 = *t1;
}

static void _fx_free_LT2SR10Ast__loc_t(struct _fx_LT2SR10Ast__loc_t_data_t** dst)
{
   FX_FREE_LIST_IMPL(_fx_LT2SR10Ast__loc_t, _fx_free_T2SR10Ast__loc_t);
}

static int _fx_cons_LT2SR10Ast__loc_t(
   struct _fx_T2SR10Ast__loc_t* hd,
   struct _fx_LT2SR10Ast__loc_t_data_t* tl,
   bool addref_tl,
   struct _fx_LT2SR10Ast__loc_t_data_t** fx_result)
{
   FX_MAKE_LIST_IMPL(_fx_LT2SR10Ast__loc_t, _fx_copy_T2SR10Ast__loc_t);
}

static int _fx_cons_Li(int_ hd, struct _fx_Li_data_t* tl, bool addref_tl, struct _fx_Li_data_t** fx_result)
{
   FX_MAKE_LIST_IMPL(_fx_Li, FX_COPY_SIMPLE);
}

static void _fx_free_N11PP__pptok_t(struct _fx_N11PP__pptok_t* dst)
{
   switch (dst->tag) {
   case 1:
      fx_free_str(&dst->u.PPString); break;
   default:
      ;
   }
   dst->tag = 0;
}

static void _fx_copy_N11PP__pptok_t(struct _fx_N11PP__pptok_t* src, struct _fx_N11PP__pptok_t* dst)
{
   dst->tag = src->tag;
   switch (src->tag) {
   case 1:
      fx_copy_str(&src->u.PPString, &dst->u.PPString); break;
   default:
      dst->u = src->u;
   }
}

static void _fx_free_T2N11PP__pptok_ti(struct _fx_T2N11PP__pptok_ti* dst)
{
   _fx_free_N11PP__pptok_t(&dst->t0);
}

static void _fx_copy_T2N11PP__pptok_ti(struct _fx_T2N11PP__pptok_ti* src, struct _fx_T2N11PP__pptok_ti* dst)
{
   _fx_copy_N11PP__pptok_t(&src->t0, &dst->t0);
   dst->t1 = src->t1;
}

static void _fx_make_T2N11PP__pptok_ti(struct _fx_N11PP__pptok_t* t0, int_ t1, struct _fx_T2N11PP__pptok_ti* fx_result)
{
   _fx_copy_N11PP__pptok_t(t0, &fx_result->t0);
   fx_result->t1 = t1;
}

static void _fx_free_R11PP__state_t(struct _fx_R11PP__state_t* dst)
{
   fx_free_arr(&dst->q);
   fx_free_arr(&dst->stack);
   fx_free_arr(&dst->pp_stack);
}

static void _fx_copy_R11PP__state_t(struct _fx_R11PP__state_t* src, struct _fx_R11PP__state_t* dst)
{
   dst->space = src->space;
   dst->left = src->left;
   dst->right = src->right;
   dst->top = src->top;
   dst->bottom = src->bottom;
   dst->lefttotal = src->lefttotal;
   dst->righttotal = src->righttotal;
   fx_copy_arr(&src->q, &dst->q);
   fx_copy_arr(&src->stack, &dst->stack);
   fx_copy_arr(&src->pp_stack, &dst->pp_stack);
   dst->pp_top = src->pp_top;
   dst->emptystack = src->emptystack;
}

static void _fx_make_R11PP__state_t(
   int_ r_space,
   int_ r_left,
   int_ r_right,
   int_ r_top,
   int_ r_bottom,
   int_ r_lefttotal,
   int_ r_righttotal,
   fx_arr_t* r_q,
   fx_arr_t* r_stack,
   fx_arr_t* r_pp_stack,
   int_ r_pp_top,
   bool r_emptystack,
   struct _fx_R11PP__state_t* fx_result)
{
   fx_result->space = r_space;
   fx_result->left = r_left;
   fx_result->right = r_right;
   fx_result->top = r_top;
   fx_result->bottom = r_bottom;
   fx_result->lefttotal = r_lefttotal;
   fx_result->righttotal = r_righttotal;
   fx_copy_arr(r_q, &fx_result->q);
   fx_copy_arr(r_stack, &fx_result->stack);
   fx_copy_arr(r_pp_stack, &fx_result->pp_stack);
   fx_result->pp_top = r_pp_top;
   fx_result->emptystack = r_emptystack;
}

static void _fx_free_rR11PP__state_t(struct _fx_rR11PP__state_t_data_t** dst)
{
   FX_FREE_REF_IMPL(_fx_rR11PP__state_t, _fx_free_R11PP__state_t);
}

static int _fx_make_rR11PP__state_t(struct _fx_R11PP__state_t* arg, struct _fx_rR11PP__state_t_data_t** fx_result)
{
   FX_MAKE_REF_IMPL(_fx_rR11PP__state_t, _fx_copy_R11PP__state_t);
}

static void _fx_free_R5PP__t(struct _fx_R5PP__t* dst)
{
   fx_free_fp(&dst->print_f);
   fx_free_fp(&dst->get_f);
   _fx_free_rR11PP__state_t(&dst->r);
}

static void _fx_copy_R5PP__t(struct _fx_R5PP__t* src, struct _fx_R5PP__t* dst)
{
   dst->margin = src->margin;
   dst->default_indent = src->default_indent;
   FX_COPY_FP(&src->print_f, &dst->print_f);
   FX_COPY_FP(&src->get_f, &dst->get_f);
   FX_COPY_PTR(src->r, &dst->r);
}

static void _fx_make_R5PP__t(
   int_ r_margin,
   int_ r_default_indent,
   struct _fx_FPv1S* r_print_f,
   struct _fx_FPLS0* r_get_f,
   struct _fx_rR11PP__state_t_data_t* r_r,
   struct _fx_R5PP__t* fx_result)
{
   fx_result->margin = r_margin;
   fx_result->default_indent = r_default_indent;
   FX_COPY_FP(r_print_f, &fx_result->print_f);
   FX_COPY_FP(r_get_f, &fx_result->get_f);
   FX_COPY_PTR(r_r, &fx_result->r);
}

static void _fx_free_Nt6option1rR23K_form__kdefinterface_t(struct _fx_Nt6option1rR23K_form__kdefinterface_t* dst)
{
   switch (dst->tag) {
   case 2:
      _fx_free_rR23K_form__kdefinterface_t(&dst->u.Some); break;
   default:
      ;
   }
   dst->tag = 0;
}

static void _fx_copy_Nt6option1rR23K_form__kdefinterface_t(
   struct _fx_Nt6option1rR23K_form__kdefinterface_t* src,
   struct _fx_Nt6option1rR23K_form__kdefinterface_t* dst)
{
   dst->tag = src->tag;
   switch (src->tag) {
   case 2:
      FX_COPY_PTR(src->u.Some, &dst->u.Some); break;
   default:
      dst->u = src->u;
   }
}

static void _fx_free_N14K_form__klit_t(struct _fx_N14K_form__klit_t* dst)
{
   switch (dst->tag) {
   case 5:
      fx_free_str(&dst->u.KLitString); break;
   case 8:
      _fx_free_N14K_form__ktyp_t(&dst->u.KLitNil); break;
   default:
      ;
   }
   dst->tag = 0;
}

static void _fx_copy_N14K_form__klit_t(struct _fx_N14K_form__klit_t* src, struct _fx_N14K_form__klit_t* dst)
{
   dst->tag = src->tag;
   switch (src->tag) {
   case 5:
      fx_copy_str(&src->u.KLitString, &dst->u.KLitString); break;
   case 8:
      FX_COPY_PTR(src->u.KLitNil, &dst->u.KLitNil); break;
   default:
      dst->u = src->u;
   }
}

static void _fx_free_N14K_form__atom_t(struct _fx_N14K_form__atom_t* dst)
{
   switch (dst->tag) {
   case 2:
      _fx_free_N14K_form__klit_t(&dst->u.AtomLit); break;
   default:
      ;
   }
   dst->tag = 0;
}

static void _fx_copy_N14K_form__atom_t(struct _fx_N14K_form__atom_t* src, struct _fx_N14K_form__atom_t* dst)
{
   dst->tag = src->tag;
   switch (src->tag) {
   case 2:
      _fx_copy_N14K_form__klit_t(&src->u.AtomLit, &dst->u.AtomLit); break;
   default:
      dst->u = src->u;
   }
}

static void _fx_free_Nt6option1N14K_form__atom_t(struct _fx_Nt6option1N14K_form__atom_t* dst)
{
   switch (dst->tag) {
   case 2:
      _fx_free_N14K_form__atom_t(&dst->u.Some); break;
   default:
      ;
   }
   dst->tag = 0;
}

static void _fx_copy_Nt6option1N14K_form__atom_t(
   struct _fx_Nt6option1N14K_form__atom_t* src,
   struct _fx_Nt6option1N14K_form__atom_t* dst)
{
   dst->tag = src->tag;
   switch (src->tag) {
   case 2:
      _fx_copy_N14K_form__atom_t(&src->u.Some, &dst->u.Some); break;
   default:
      dst->u = src->u;
   }
}

static void _fx_free_LN14K_form__kexp_t(struct _fx_LN14K_form__kexp_t_data_t** dst)
{
   FX_FREE_LIST_IMPL(_fx_LN14K_form__kexp_t, _fx_free_N14K_form__kexp_t);
}

static int _fx_cons_LN14K_form__kexp_t(
   struct _fx_N14K_form__kexp_t_data_t* hd,
   struct _fx_LN14K_form__kexp_t_data_t* tl,
   bool addref_tl,
   struct _fx_LN14K_form__kexp_t_data_t** fx_result)
{
   FX_MAKE_LIST_IMPL(_fx_LN14K_form__kexp_t, FX_COPY_PTR);
}

static void _fx_free_T2BN14K_form__atom_t(struct _fx_T2BN14K_form__atom_t* dst)
{
   _fx_free_N14K_form__atom_t(&dst->t1);
}

static void _fx_copy_T2BN14K_form__atom_t(struct _fx_T2BN14K_form__atom_t* src, struct _fx_T2BN14K_form__atom_t* dst)
{
   dst->t0 = src->t0;
   _fx_copy_N14K_form__atom_t(&src->t1, &dst->t1);
}

static void _fx_make_T2BN14K_form__atom_t(bool t0, struct _fx_N14K_form__atom_t* t1, struct _fx_T2BN14K_form__atom_t* fx_result)
{
   fx_result->t0 = t0;
   _fx_copy_N14K_form__atom_t(t1, &fx_result->t1);
}

static void _fx_free_LT2BN14K_form__atom_t(struct _fx_LT2BN14K_form__atom_t_data_t** dst)
{
   FX_FREE_LIST_IMPL(_fx_LT2BN14K_form__atom_t, _fx_free_T2BN14K_form__atom_t);
}

static int _fx_cons_LT2BN14K_form__atom_t(
   struct _fx_T2BN14K_form__atom_t* hd,
   struct _fx_LT2BN14K_form__atom_t_data_t* tl,
   bool addref_tl,
   struct _fx_LT2BN14K_form__atom_t_data_t** fx_result)
{
   FX_MAKE_LIST_IMPL(_fx_LT2BN14K_form__atom_t, _fx_copy_T2BN14K_form__atom_t);
}

static void _fx_free_T2LN14K_form__ktyp_tN14K_form__ktyp_t(struct _fx_T2LN14K_form__ktyp_tN14K_form__ktyp_t* dst)
{
   _fx_free_LN14K_form__ktyp_t(&dst->t0);
   _fx_free_N14K_form__ktyp_t(&dst->t1);
}

static void _fx_copy_T2LN14K_form__ktyp_tN14K_form__ktyp_t(
   struct _fx_T2LN14K_form__ktyp_tN14K_form__ktyp_t* src,
   struct _fx_T2LN14K_form__ktyp_tN14K_form__ktyp_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   FX_COPY_PTR(src->t1, &dst->t1);
}

static void _fx_make_T2LN14K_form__ktyp_tN14K_form__ktyp_t(
   struct _fx_LN14K_form__ktyp_t_data_t* t0,
   struct _fx_N14K_form__ktyp_t_data_t* t1,
   struct _fx_T2LN14K_form__ktyp_tN14K_form__ktyp_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   FX_COPY_PTR(t1, &fx_result->t1);
}

static void _fx_free_T2R9Ast__id_tLT2R9Ast__id_tN14K_form__ktyp_t(struct _fx_T2R9Ast__id_tLT2R9Ast__id_tN14K_form__ktyp_t* dst)
{
   _fx_free_LT2R9Ast__id_tN14K_form__ktyp_t(&dst->t1);
}

static void _fx_copy_T2R9Ast__id_tLT2R9Ast__id_tN14K_form__ktyp_t(
   struct _fx_T2R9Ast__id_tLT2R9Ast__id_tN14K_form__ktyp_t* src,
   struct _fx_T2R9Ast__id_tLT2R9Ast__id_tN14K_form__ktyp_t* dst)
{
   dst->t0 = src->t0;
   FX_COPY_PTR(src->t1, &dst->t1);
}

static void _fx_make_T2R9Ast__id_tLT2R9Ast__id_tN14K_form__ktyp_t(
   struct _fx_R9Ast__id_t* t0,
   struct _fx_LT2R9Ast__id_tN14K_form__ktyp_t_data_t* t1,
   struct _fx_T2R9Ast__id_tLT2R9Ast__id_tN14K_form__ktyp_t* fx_result)
{
   fx_result->t0 = *t0;
   FX_COPY_PTR(t1, &fx_result->t1);
}

static void _fx_free_T2iN14K_form__ktyp_t(struct _fx_T2iN14K_form__ktyp_t* dst)
{
   _fx_free_N14K_form__ktyp_t(&dst->t1);
}

static void _fx_copy_T2iN14K_form__ktyp_t(struct _fx_T2iN14K_form__ktyp_t* src, struct _fx_T2iN14K_form__ktyp_t* dst)
{
   dst->t0 = src->t0;
   FX_COPY_PTR(src->t1, &dst->t1);
}

static void _fx_make_T2iN14K_form__ktyp_t(
   int_ t0,
   struct _fx_N14K_form__ktyp_t_data_t* t1,
   struct _fx_T2iN14K_form__ktyp_t* fx_result)
{
   fx_result->t0 = t0;
   FX_COPY_PTR(t1, &fx_result->t1);
}

static void _fx_free_N14K_form__ktyp_t(struct _fx_N14K_form__ktyp_t_data_t** dst)
{
   if (*dst && FX_DECREF((*dst)->rc) == 1) {
      switch ((*dst)->tag) {
      case 12:
         _fx_free_N14K_form__ktyp_t(&(*dst)->u.KTypRawPointer); break;
      case 13:
         _fx_free_T2LN14K_form__ktyp_tN14K_form__ktyp_t(&(*dst)->u.KTypFun); break;
      case 14:
         _fx_free_LN14K_form__ktyp_t(&(*dst)->u.KTypTuple); break;
      case 15:
         _fx_free_T2R9Ast__id_tLT2R9Ast__id_tN14K_form__ktyp_t(&(*dst)->u.KTypRecord); break;
      case 17:
         _fx_free_T2iN14K_form__ktyp_t(&(*dst)->u.KTypArray); break;
      case 18:
         _fx_free_N14K_form__ktyp_t(&(*dst)->u.KTypVector); break;
      case 19:
         _fx_free_N14K_form__ktyp_t(&(*dst)->u.KTypList); break;
      case 20:
         _fx_free_N14K_form__ktyp_t(&(*dst)->u.KTypRef); break;
      default:
         ;
      }
      fx_free(*dst);
   }
   *dst = 0;
}

static void _fx_free_Ta3N14K_form__atom_t(struct _fx_Ta3N14K_form__atom_t* dst)
{
   _fx_free_N14K_form__atom_t(&dst->t0);
   _fx_free_N14K_form__atom_t(&dst->t1);
   _fx_free_N14K_form__atom_t(&dst->t2);
}

static void _fx_copy_Ta3N14K_form__atom_t(struct _fx_Ta3N14K_form__atom_t* src, struct _fx_Ta3N14K_form__atom_t* dst)
{
   _fx_copy_N14K_form__atom_t(&src->t0, &dst->t0);
   _fx_copy_N14K_form__atom_t(&src->t1, &dst->t1);
   _fx_copy_N14K_form__atom_t(&src->t2, &dst->t2);
}

static void _fx_make_Ta3N14K_form__atom_t(
   struct _fx_N14K_form__atom_t* t0,
   struct _fx_N14K_form__atom_t* t1,
   struct _fx_N14K_form__atom_t* t2,
   struct _fx_Ta3N14K_form__atom_t* fx_result)
{
   _fx_copy_N14K_form__atom_t(t0, &fx_result->t0);
   _fx_copy_N14K_form__atom_t(t1, &fx_result->t1);
   _fx_copy_N14K_form__atom_t(t2, &fx_result->t2);
}

static void _fx_free_N13K_form__dom_t(struct _fx_N13K_form__dom_t* dst)
{
   switch (dst->tag) {
   case 1:
      _fx_free_N14K_form__atom_t(&dst->u.DomainElem); break;
   case 2:
      _fx_free_N14K_form__atom_t(&dst->u.DomainFast); break;
   case 3:
      _fx_free_Ta3N14K_form__atom_t(&dst->u.DomainRange); break;
   default:
      ;
   }
   dst->tag = 0;
}

static void _fx_copy_N13K_form__dom_t(struct _fx_N13K_form__dom_t* src, struct _fx_N13K_form__dom_t* dst)
{
   dst->tag = src->tag;
   switch (src->tag) {
   case 1:
      _fx_copy_N14K_form__atom_t(&src->u.DomainElem, &dst->u.DomainElem); break;
   case 2:
      _fx_copy_N14K_form__atom_t(&src->u.DomainFast, &dst->u.DomainFast); break;
   case 3:
      _fx_copy_Ta3N14K_form__atom_t(&src->u.DomainRange, &dst->u.DomainRange); break;
   default:
      dst->u = src->u;
   }
}

static void _fx_free_T2Nt6option1N14K_form__atom_tR10Ast__loc_t(struct _fx_T2Nt6option1N14K_form__atom_tR10Ast__loc_t* dst)
{
   _fx_free_Nt6option1N14K_form__atom_t(&dst->t0);
}

static void _fx_copy_T2Nt6option1N14K_form__atom_tR10Ast__loc_t(
   struct _fx_T2Nt6option1N14K_form__atom_tR10Ast__loc_t* src,
   struct _fx_T2Nt6option1N14K_form__atom_tR10Ast__loc_t* dst)
{
   _fx_copy_Nt6option1N14K_form__atom_t(&src->t0, &dst->t0);
   dst->t1 = src->t1;
}

static void _fx_make_T2Nt6option1N14K_form__atom_tR10Ast__loc_t(
   struct _fx_Nt6option1N14K_form__atom_t* t0,
   struct _fx_R10Ast__loc_t* t1,
   struct _fx_T2Nt6option1N14K_form__atom_tR10Ast__loc_t* fx_result)
{
   _fx_copy_Nt6option1N14K_form__atom_t(t0, &fx_result->t0);
   fx_result->t1 = *t1;
}

static void _fx_free_T2N14K_form__ktyp_tR10Ast__loc_t(struct _fx_T2N14K_form__ktyp_tR10Ast__loc_t* dst)
{
   _fx_free_N14K_form__ktyp_t(&dst->t0);
}

static void _fx_copy_T2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_T2N14K_form__ktyp_tR10Ast__loc_t* src,
   struct _fx_T2N14K_form__ktyp_tR10Ast__loc_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   dst->t1 = src->t1;
}

static void _fx_make_T2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_N14K_form__ktyp_t_data_t* t0,
   struct _fx_R10Ast__loc_t* t1,
   struct _fx_T2N14K_form__ktyp_tR10Ast__loc_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   fx_result->t1 = *t1;
}

static void _fx_free_T2N14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_T2N14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* dst)
{
   _fx_free_N14K_form__atom_t(&dst->t0);
   _fx_free_T2N14K_form__ktyp_tR10Ast__loc_t(&dst->t1);
}

static void _fx_copy_T2N14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_T2N14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* src,
   struct _fx_T2N14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* dst)
{
   _fx_copy_N14K_form__atom_t(&src->t0, &dst->t0);
   _fx_copy_T2N14K_form__ktyp_tR10Ast__loc_t(&src->t1, &dst->t1);
}

static void _fx_make_T2N14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_N14K_form__atom_t* t0,
   struct _fx_T2N14K_form__ktyp_tR10Ast__loc_t* t1,
   struct _fx_T2N14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* fx_result)
{
   _fx_copy_N14K_form__atom_t(t0, &fx_result->t0);
   _fx_copy_T2N14K_form__ktyp_tR10Ast__loc_t(t1, &fx_result->t1);
}

static void _fx_free_T4N13Ast__binary_tN14K_form__atom_tN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_T4N13Ast__binary_tN14K_form__atom_tN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* dst)
{
   _fx_free_N13Ast__binary_t(&dst->t0);
   _fx_free_N14K_form__atom_t(&dst->t1);
   _fx_free_N14K_form__atom_t(&dst->t2);
   _fx_free_T2N14K_form__ktyp_tR10Ast__loc_t(&dst->t3);
}

static void _fx_copy_T4N13Ast__binary_tN14K_form__atom_tN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_T4N13Ast__binary_tN14K_form__atom_tN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* src,
   struct _fx_T4N13Ast__binary_tN14K_form__atom_tN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   _fx_copy_N14K_form__atom_t(&src->t1, &dst->t1);
   _fx_copy_N14K_form__atom_t(&src->t2, &dst->t2);
   _fx_copy_T2N14K_form__ktyp_tR10Ast__loc_t(&src->t3, &dst->t3);
}

static void _fx_make_T4N13Ast__binary_tN14K_form__atom_tN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_N13Ast__binary_t_data_t* t0,
   struct _fx_N14K_form__atom_t* t1,
   struct _fx_N14K_form__atom_t* t2,
   struct _fx_T2N14K_form__ktyp_tR10Ast__loc_t* t3,
   struct _fx_T4N13Ast__binary_tN14K_form__atom_tN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   _fx_copy_N14K_form__atom_t(t1, &fx_result->t1);
   _fx_copy_N14K_form__atom_t(t2, &fx_result->t2);
   _fx_copy_T2N14K_form__ktyp_tR10Ast__loc_t(t3, &fx_result->t3);
}

static void _fx_free_T3N12Ast__unary_tN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_T3N12Ast__unary_tN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* dst)
{
   _fx_free_N14K_form__atom_t(&dst->t1);
   _fx_free_T2N14K_form__ktyp_tR10Ast__loc_t(&dst->t2);
}

static void _fx_copy_T3N12Ast__unary_tN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_T3N12Ast__unary_tN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* src,
   struct _fx_T3N12Ast__unary_tN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* dst)
{
   dst->t0 = src->t0;
   _fx_copy_N14K_form__atom_t(&src->t1, &dst->t1);
   _fx_copy_T2N14K_form__ktyp_tR10Ast__loc_t(&src->t2, &dst->t2);
}

static void _fx_make_T3N12Ast__unary_tN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_N12Ast__unary_t* t0,
   struct _fx_N14K_form__atom_t* t1,
   struct _fx_T2N14K_form__ktyp_tR10Ast__loc_t* t2,
   struct _fx_T3N12Ast__unary_tN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* fx_result)
{
   fx_result->t0 = *t0;
   _fx_copy_N14K_form__atom_t(t1, &fx_result->t1);
   _fx_copy_T2N14K_form__ktyp_tR10Ast__loc_t(t2, &fx_result->t2);
}

static void _fx_free_LN14K_form__atom_t(struct _fx_LN14K_form__atom_t_data_t** dst)
{
   FX_FREE_LIST_IMPL(_fx_LN14K_form__atom_t, _fx_free_N14K_form__atom_t);
}

static int _fx_cons_LN14K_form__atom_t(
   struct _fx_N14K_form__atom_t* hd,
   struct _fx_LN14K_form__atom_t_data_t* tl,
   bool addref_tl,
   struct _fx_LN14K_form__atom_t_data_t** fx_result)
{
   FX_MAKE_LIST_IMPL(_fx_LN14K_form__atom_t, _fx_copy_N14K_form__atom_t);
}

static void _fx_free_T3N13Ast__intrin_tLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_T3N13Ast__intrin_tLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* dst)
{
   _fx_free_LN14K_form__atom_t(&dst->t1);
   _fx_free_T2N14K_form__ktyp_tR10Ast__loc_t(&dst->t2);
}

static void _fx_copy_T3N13Ast__intrin_tLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_T3N13Ast__intrin_tLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* src,
   struct _fx_T3N13Ast__intrin_tLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* dst)
{
   dst->t0 = src->t0;
   FX_COPY_PTR(src->t1, &dst->t1);
   _fx_copy_T2N14K_form__ktyp_tR10Ast__loc_t(&src->t2, &dst->t2);
}

static void _fx_make_T3N13Ast__intrin_tLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_N13Ast__intrin_t* t0,
   struct _fx_LN14K_form__atom_t_data_t* t1,
   struct _fx_T2N14K_form__ktyp_tR10Ast__loc_t* t2,
   struct _fx_T3N13Ast__intrin_tLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* fx_result)
{
   fx_result->t0 = *t0;
   FX_COPY_PTR(t1, &fx_result->t1);
   _fx_copy_T2N14K_form__ktyp_tR10Ast__loc_t(t2, &fx_result->t2);
}

static void _fx_free_T2R9Ast__id_tN14K_form__kexp_t(struct _fx_T2R9Ast__id_tN14K_form__kexp_t* dst)
{
   _fx_free_N14K_form__kexp_t(&dst->t1);
}

static void _fx_copy_T2R9Ast__id_tN14K_form__kexp_t(
   struct _fx_T2R9Ast__id_tN14K_form__kexp_t* src,
   struct _fx_T2R9Ast__id_tN14K_form__kexp_t* dst)
{
   dst->t0 = src->t0;
   FX_COPY_PTR(src->t1, &dst->t1);
}

static void _fx_make_T2R9Ast__id_tN14K_form__kexp_t(
   struct _fx_R9Ast__id_t* t0,
   struct _fx_N14K_form__kexp_t_data_t* t1,
   struct _fx_T2R9Ast__id_tN14K_form__kexp_t* fx_result)
{
   fx_result->t0 = *t0;
   FX_COPY_PTR(t1, &fx_result->t1);
}

static void _fx_free_T2LN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_T2LN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t* dst)
{
   _fx_free_LN14K_form__kexp_t(&dst->t0);
   _fx_free_T2N14K_form__ktyp_tR10Ast__loc_t(&dst->t1);
}

static void _fx_copy_T2LN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_T2LN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t* src,
   struct _fx_T2LN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   _fx_copy_T2N14K_form__ktyp_tR10Ast__loc_t(&src->t1, &dst->t1);
}

static void _fx_make_T2LN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_LN14K_form__kexp_t_data_t* t0,
   struct _fx_T2N14K_form__ktyp_tR10Ast__loc_t* t1,
   struct _fx_T2LN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   _fx_copy_T2N14K_form__ktyp_tR10Ast__loc_t(t1, &fx_result->t1);
}

static void _fx_free_T4N14K_form__kexp_tN14K_form__kexp_tN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_T4N14K_form__kexp_tN14K_form__kexp_tN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t* dst)
{
   _fx_free_N14K_form__kexp_t(&dst->t0);
   _fx_free_N14K_form__kexp_t(&dst->t1);
   _fx_free_N14K_form__kexp_t(&dst->t2);
   _fx_free_T2N14K_form__ktyp_tR10Ast__loc_t(&dst->t3);
}

static void _fx_copy_T4N14K_form__kexp_tN14K_form__kexp_tN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_T4N14K_form__kexp_tN14K_form__kexp_tN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t* src,
   struct _fx_T4N14K_form__kexp_tN14K_form__kexp_tN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   FX_COPY_PTR(src->t1, &dst->t1);
   FX_COPY_PTR(src->t2, &dst->t2);
   _fx_copy_T2N14K_form__ktyp_tR10Ast__loc_t(&src->t3, &dst->t3);
}

static void _fx_make_T4N14K_form__kexp_tN14K_form__kexp_tN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_N14K_form__kexp_t_data_t* t0,
   struct _fx_N14K_form__kexp_t_data_t* t1,
   struct _fx_N14K_form__kexp_t_data_t* t2,
   struct _fx_T2N14K_form__ktyp_tR10Ast__loc_t* t3,
   struct _fx_T4N14K_form__kexp_tN14K_form__kexp_tN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   FX_COPY_PTR(t1, &fx_result->t1);
   FX_COPY_PTR(t2, &fx_result->t2);
   _fx_copy_T2N14K_form__ktyp_tR10Ast__loc_t(t3, &fx_result->t3);
}

static void _fx_free_T3R9Ast__id_tLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_T3R9Ast__id_tLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* dst)
{
   _fx_free_LN14K_form__atom_t(&dst->t1);
   _fx_free_T2N14K_form__ktyp_tR10Ast__loc_t(&dst->t2);
}

static void _fx_copy_T3R9Ast__id_tLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_T3R9Ast__id_tLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* src,
   struct _fx_T3R9Ast__id_tLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* dst)
{
   dst->t0 = src->t0;
   FX_COPY_PTR(src->t1, &dst->t1);
   _fx_copy_T2N14K_form__ktyp_tR10Ast__loc_t(&src->t2, &dst->t2);
}

static void _fx_make_T3R9Ast__id_tLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_R9Ast__id_t* t0,
   struct _fx_LN14K_form__atom_t_data_t* t1,
   struct _fx_T2N14K_form__ktyp_tR10Ast__loc_t* t2,
   struct _fx_T3R9Ast__id_tLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* fx_result)
{
   fx_result->t0 = *t0;
   FX_COPY_PTR(t1, &fx_result->t1);
   _fx_copy_T2N14K_form__ktyp_tR10Ast__loc_t(t2, &fx_result->t2);
}

static void _fx_free_T4R9Ast__id_tiLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_T4R9Ast__id_tiLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* dst)
{
   _fx_free_LN14K_form__atom_t(&dst->t2);
   _fx_free_T2N14K_form__ktyp_tR10Ast__loc_t(&dst->t3);
}

static void _fx_copy_T4R9Ast__id_tiLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_T4R9Ast__id_tiLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* src,
   struct _fx_T4R9Ast__id_tiLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* dst)
{
   dst->t0 = src->t0;
   dst->t1 = src->t1;
   FX_COPY_PTR(src->t2, &dst->t2);
   _fx_copy_T2N14K_form__ktyp_tR10Ast__loc_t(&src->t3, &dst->t3);
}

static void _fx_make_T4R9Ast__id_tiLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_R9Ast__id_t* t0,
   int_ t1,
   struct _fx_LN14K_form__atom_t_data_t* t2,
   struct _fx_T2N14K_form__ktyp_tR10Ast__loc_t* t3,
   struct _fx_T4R9Ast__id_tiLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* fx_result)
{
   fx_result->t0 = *t0;
   fx_result->t1 = t1;
   FX_COPY_PTR(t2, &fx_result->t2);
   _fx_copy_T2N14K_form__ktyp_tR10Ast__loc_t(t3, &fx_result->t3);
}

static void _fx_free_T2LN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_T2LN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* dst)
{
   _fx_free_LN14K_form__atom_t(&dst->t0);
   _fx_free_T2N14K_form__ktyp_tR10Ast__loc_t(&dst->t1);
}

static void _fx_copy_T2LN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_T2LN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* src,
   struct _fx_T2LN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   _fx_copy_T2N14K_form__ktyp_tR10Ast__loc_t(&src->t1, &dst->t1);
}

static void _fx_make_T2LN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_LN14K_form__atom_t_data_t* t0,
   struct _fx_T2N14K_form__ktyp_tR10Ast__loc_t* t1,
   struct _fx_T2LN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   _fx_copy_T2N14K_form__ktyp_tR10Ast__loc_t(t1, &fx_result->t1);
}

static void _fx_free_T4R9Ast__id_tR9Ast__id_tLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_T4R9Ast__id_tR9Ast__id_tLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* dst)
{
   _fx_free_LN14K_form__atom_t(&dst->t2);
   _fx_free_T2N14K_form__ktyp_tR10Ast__loc_t(&dst->t3);
}

static void _fx_copy_T4R9Ast__id_tR9Ast__id_tLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_T4R9Ast__id_tR9Ast__id_tLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* src,
   struct _fx_T4R9Ast__id_tR9Ast__id_tLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* dst)
{
   dst->t0 = src->t0;
   dst->t1 = src->t1;
   FX_COPY_PTR(src->t2, &dst->t2);
   _fx_copy_T2N14K_form__ktyp_tR10Ast__loc_t(&src->t3, &dst->t3);
}

static void _fx_make_T4R9Ast__id_tR9Ast__id_tLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_R9Ast__id_t* t0,
   struct _fx_R9Ast__id_t* t1,
   struct _fx_LN14K_form__atom_t_data_t* t2,
   struct _fx_T2N14K_form__ktyp_tR10Ast__loc_t* t3,
   struct _fx_T4R9Ast__id_tR9Ast__id_tLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* fx_result)
{
   fx_result->t0 = *t0;
   fx_result->t1 = *t1;
   FX_COPY_PTR(t2, &fx_result->t2);
   _fx_copy_T2N14K_form__ktyp_tR10Ast__loc_t(t3, &fx_result->t3);
}

static void _fx_free_LLT2BN14K_form__atom_t(struct _fx_LLT2BN14K_form__atom_t_data_t** dst)
{
   FX_FREE_LIST_IMPL(_fx_LLT2BN14K_form__atom_t, _fx_free_LT2BN14K_form__atom_t);
}

static int _fx_cons_LLT2BN14K_form__atom_t(
   struct _fx_LT2BN14K_form__atom_t_data_t* hd,
   struct _fx_LLT2BN14K_form__atom_t_data_t* tl,
   bool addref_tl,
   struct _fx_LLT2BN14K_form__atom_t_data_t** fx_result)
{
   FX_MAKE_LIST_IMPL(_fx_LLT2BN14K_form__atom_t, FX_COPY_PTR);
}

static void _fx_free_T3BLLT2BN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_T3BLLT2BN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* dst)
{
   _fx_free_LLT2BN14K_form__atom_t(&dst->t1);
   _fx_free_T2N14K_form__ktyp_tR10Ast__loc_t(&dst->t2);
}

static void _fx_copy_T3BLLT2BN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_T3BLLT2BN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* src,
   struct _fx_T3BLLT2BN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* dst)
{
   dst->t0 = src->t0;
   FX_COPY_PTR(src->t1, &dst->t1);
   _fx_copy_T2N14K_form__ktyp_tR10Ast__loc_t(&src->t2, &dst->t2);
}

static void _fx_make_T3BLLT2BN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(
   bool t0,
   struct _fx_LLT2BN14K_form__atom_t_data_t* t1,
   struct _fx_T2N14K_form__ktyp_tR10Ast__loc_t* t2,
   struct _fx_T3BLLT2BN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* fx_result)
{
   fx_result->t0 = t0;
   FX_COPY_PTR(t1, &fx_result->t1);
   _fx_copy_T2N14K_form__ktyp_tR10Ast__loc_t(t2, &fx_result->t2);
}

static void _fx_free_T2LT2BN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_T2LT2BN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* dst)
{
   _fx_free_LT2BN14K_form__atom_t(&dst->t0);
   _fx_free_T2N14K_form__ktyp_tR10Ast__loc_t(&dst->t1);
}

static void _fx_copy_T2LT2BN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_T2LT2BN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* src,
   struct _fx_T2LT2BN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   _fx_copy_T2N14K_form__ktyp_tR10Ast__loc_t(&src->t1, &dst->t1);
}

static void _fx_make_T2LT2BN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_LT2BN14K_form__atom_t_data_t* t0,
   struct _fx_T2N14K_form__ktyp_tR10Ast__loc_t* t1,
   struct _fx_T2LT2BN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   _fx_copy_T2N14K_form__ktyp_tR10Ast__loc_t(t1, &fx_result->t1);
}

static void _fx_free_LN13K_form__dom_t(struct _fx_LN13K_form__dom_t_data_t** dst)
{
   FX_FREE_LIST_IMPL(_fx_LN13K_form__dom_t, _fx_free_N13K_form__dom_t);
}

static int _fx_cons_LN13K_form__dom_t(
   struct _fx_N13K_form__dom_t* hd,
   struct _fx_LN13K_form__dom_t_data_t* tl,
   bool addref_tl,
   struct _fx_LN13K_form__dom_t_data_t** fx_result)
{
   FX_MAKE_LIST_IMPL(_fx_LN13K_form__dom_t, _fx_copy_N13K_form__dom_t);
}

static void _fx_free_T5N14K_form__atom_tN13Ast__border_tN18Ast__interpolate_tLN13K_form__dom_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_T5N14K_form__atom_tN13Ast__border_tN18Ast__interpolate_tLN13K_form__dom_tT2N14K_form__ktyp_tR10Ast__loc_t* dst)
{
   _fx_free_N14K_form__atom_t(&dst->t0);
   _fx_free_LN13K_form__dom_t(&dst->t3);
   _fx_free_T2N14K_form__ktyp_tR10Ast__loc_t(&dst->t4);
}

static void _fx_copy_T5N14K_form__atom_tN13Ast__border_tN18Ast__interpolate_tLN13K_form__dom_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_T5N14K_form__atom_tN13Ast__border_tN18Ast__interpolate_tLN13K_form__dom_tT2N14K_form__ktyp_tR10Ast__loc_t* src,
   struct _fx_T5N14K_form__atom_tN13Ast__border_tN18Ast__interpolate_tLN13K_form__dom_tT2N14K_form__ktyp_tR10Ast__loc_t* dst)
{
   _fx_copy_N14K_form__atom_t(&src->t0, &dst->t0);
   dst->t1 = src->t1;
   dst->t2 = src->t2;
   FX_COPY_PTR(src->t3, &dst->t3);
   _fx_copy_T2N14K_form__ktyp_tR10Ast__loc_t(&src->t4, &dst->t4);
}

static void _fx_make_T5N14K_form__atom_tN13Ast__border_tN18Ast__interpolate_tLN13K_form__dom_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_N14K_form__atom_t* t0,
   struct _fx_N13Ast__border_t* t1,
   struct _fx_N18Ast__interpolate_t* t2,
   struct _fx_LN13K_form__dom_t_data_t* t3,
   struct _fx_T2N14K_form__ktyp_tR10Ast__loc_t* t4,
   struct _fx_T5N14K_form__atom_tN13Ast__border_tN18Ast__interpolate_tLN13K_form__dom_tT2N14K_form__ktyp_tR10Ast__loc_t*
      fx_result)
{
   _fx_copy_N14K_form__atom_t(t0, &fx_result->t0);
   fx_result->t1 = *t1;
   fx_result->t2 = *t2;
   FX_COPY_PTR(t3, &fx_result->t3);
   _fx_copy_T2N14K_form__ktyp_tR10Ast__loc_t(t4, &fx_result->t4);
}

static void _fx_free_T3R9Ast__id_tiT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_T3R9Ast__id_tiT2N14K_form__ktyp_tR10Ast__loc_t* dst)
{
   _fx_free_T2N14K_form__ktyp_tR10Ast__loc_t(&dst->t2);
}

static void _fx_copy_T3R9Ast__id_tiT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_T3R9Ast__id_tiT2N14K_form__ktyp_tR10Ast__loc_t* src,
   struct _fx_T3R9Ast__id_tiT2N14K_form__ktyp_tR10Ast__loc_t* dst)
{
   dst->t0 = src->t0;
   dst->t1 = src->t1;
   _fx_copy_T2N14K_form__ktyp_tR10Ast__loc_t(&src->t2, &dst->t2);
}

static void _fx_make_T3R9Ast__id_tiT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_R9Ast__id_t* t0,
   int_ t1,
   struct _fx_T2N14K_form__ktyp_tR10Ast__loc_t* t2,
   struct _fx_T3R9Ast__id_tiT2N14K_form__ktyp_tR10Ast__loc_t* fx_result)
{
   fx_result->t0 = *t0;
   fx_result->t1 = t1;
   _fx_copy_T2N14K_form__ktyp_tR10Ast__loc_t(t2, &fx_result->t2);
}

static void _fx_free_T3R9Ast__id_tN14K_form__atom_tR10Ast__loc_t(struct _fx_T3R9Ast__id_tN14K_form__atom_tR10Ast__loc_t* dst)
{
   _fx_free_N14K_form__atom_t(&dst->t1);
}

static void _fx_copy_T3R9Ast__id_tN14K_form__atom_tR10Ast__loc_t(
   struct _fx_T3R9Ast__id_tN14K_form__atom_tR10Ast__loc_t* src,
   struct _fx_T3R9Ast__id_tN14K_form__atom_tR10Ast__loc_t* dst)
{
   dst->t0 = src->t0;
   _fx_copy_N14K_form__atom_t(&src->t1, &dst->t1);
   dst->t2 = src->t2;
}

static void _fx_make_T3R9Ast__id_tN14K_form__atom_tR10Ast__loc_t(
   struct _fx_R9Ast__id_t* t0,
   struct _fx_N14K_form__atom_t* t1,
   struct _fx_R10Ast__loc_t* t2,
   struct _fx_T3R9Ast__id_tN14K_form__atom_tR10Ast__loc_t* fx_result)
{
   fx_result->t0 = *t0;
   _fx_copy_N14K_form__atom_t(t1, &fx_result->t1);
   fx_result->t2 = *t2;
}

static void _fx_free_T2LN14K_form__kexp_tN14K_form__kexp_t(struct _fx_T2LN14K_form__kexp_tN14K_form__kexp_t* dst)
{
   _fx_free_LN14K_form__kexp_t(&dst->t0);
   _fx_free_N14K_form__kexp_t(&dst->t1);
}

static void _fx_copy_T2LN14K_form__kexp_tN14K_form__kexp_t(
   struct _fx_T2LN14K_form__kexp_tN14K_form__kexp_t* src,
   struct _fx_T2LN14K_form__kexp_tN14K_form__kexp_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   FX_COPY_PTR(src->t1, &dst->t1);
}

static void _fx_make_T2LN14K_form__kexp_tN14K_form__kexp_t(
   struct _fx_LN14K_form__kexp_t_data_t* t0,
   struct _fx_N14K_form__kexp_t_data_t* t1,
   struct _fx_T2LN14K_form__kexp_tN14K_form__kexp_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   FX_COPY_PTR(t1, &fx_result->t1);
}

static void _fx_free_LT2LN14K_form__kexp_tN14K_form__kexp_t(struct _fx_LT2LN14K_form__kexp_tN14K_form__kexp_t_data_t** dst)
{
   FX_FREE_LIST_IMPL(_fx_LT2LN14K_form__kexp_tN14K_form__kexp_t, _fx_free_T2LN14K_form__kexp_tN14K_form__kexp_t);
}

static int _fx_cons_LT2LN14K_form__kexp_tN14K_form__kexp_t(
   struct _fx_T2LN14K_form__kexp_tN14K_form__kexp_t* hd,
   struct _fx_LT2LN14K_form__kexp_tN14K_form__kexp_t_data_t* tl,
   bool addref_tl,
   struct _fx_LT2LN14K_form__kexp_tN14K_form__kexp_t_data_t** fx_result)
{
   FX_MAKE_LIST_IMPL(_fx_LT2LN14K_form__kexp_tN14K_form__kexp_t, _fx_copy_T2LN14K_form__kexp_tN14K_form__kexp_t);
}

static void _fx_free_T2LT2LN14K_form__kexp_tN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_T2LT2LN14K_form__kexp_tN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t* dst)
{
   _fx_free_LT2LN14K_form__kexp_tN14K_form__kexp_t(&dst->t0);
   _fx_free_T2N14K_form__ktyp_tR10Ast__loc_t(&dst->t1);
}

static void _fx_copy_T2LT2LN14K_form__kexp_tN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_T2LT2LN14K_form__kexp_tN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t* src,
   struct _fx_T2LT2LN14K_form__kexp_tN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   _fx_copy_T2N14K_form__ktyp_tR10Ast__loc_t(&src->t1, &dst->t1);
}

static void _fx_make_T2LT2LN14K_form__kexp_tN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_LT2LN14K_form__kexp_tN14K_form__kexp_t_data_t* t0,
   struct _fx_T2N14K_form__ktyp_tR10Ast__loc_t* t1,
   struct _fx_T2LT2LN14K_form__kexp_tN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   _fx_copy_T2N14K_form__ktyp_tR10Ast__loc_t(t1, &fx_result->t1);
}

static void _fx_free_T3N14K_form__kexp_tN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_T3N14K_form__kexp_tN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t* dst)
{
   _fx_free_N14K_form__kexp_t(&dst->t0);
   _fx_free_N14K_form__kexp_t(&dst->t1);
   _fx_free_T2N14K_form__ktyp_tR10Ast__loc_t(&dst->t2);
}

static void _fx_copy_T3N14K_form__kexp_tN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_T3N14K_form__kexp_tN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t* src,
   struct _fx_T3N14K_form__kexp_tN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   FX_COPY_PTR(src->t1, &dst->t1);
   _fx_copy_T2N14K_form__ktyp_tR10Ast__loc_t(&src->t2, &dst->t2);
}

static void _fx_make_T3N14K_form__kexp_tN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_N14K_form__kexp_t_data_t* t0,
   struct _fx_N14K_form__kexp_t_data_t* t1,
   struct _fx_T2N14K_form__ktyp_tR10Ast__loc_t* t2,
   struct _fx_T3N14K_form__kexp_tN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   FX_COPY_PTR(t1, &fx_result->t1);
   _fx_copy_T2N14K_form__ktyp_tR10Ast__loc_t(t2, &fx_result->t2);
}

static void _fx_free_T3N14K_form__atom_tN14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_T3N14K_form__atom_tN14K_form__ktyp_tR10Ast__loc_t* dst)
{
   _fx_free_N14K_form__atom_t(&dst->t0);
   _fx_free_N14K_form__ktyp_t(&dst->t1);
}

static void _fx_copy_T3N14K_form__atom_tN14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_T3N14K_form__atom_tN14K_form__ktyp_tR10Ast__loc_t* src,
   struct _fx_T3N14K_form__atom_tN14K_form__ktyp_tR10Ast__loc_t* dst)
{
   _fx_copy_N14K_form__atom_t(&src->t0, &dst->t0);
   FX_COPY_PTR(src->t1, &dst->t1);
   dst->t2 = src->t2;
}

static void _fx_make_T3N14K_form__atom_tN14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_N14K_form__atom_t* t0,
   struct _fx_N14K_form__ktyp_t_data_t* t1,
   struct _fx_R10Ast__loc_t* t2,
   struct _fx_T3N14K_form__atom_tN14K_form__ktyp_tR10Ast__loc_t* fx_result)
{
   _fx_copy_N14K_form__atom_t(t0, &fx_result->t0);
   FX_COPY_PTR(t1, &fx_result->t1);
   fx_result->t2 = *t2;
}

static void _fx_free_T2R9Ast__id_tN13K_form__dom_t(struct _fx_T2R9Ast__id_tN13K_form__dom_t* dst)
{
   _fx_free_N13K_form__dom_t(&dst->t1);
}

static void _fx_copy_T2R9Ast__id_tN13K_form__dom_t(
   struct _fx_T2R9Ast__id_tN13K_form__dom_t* src,
   struct _fx_T2R9Ast__id_tN13K_form__dom_t* dst)
{
   dst->t0 = src->t0;
   _fx_copy_N13K_form__dom_t(&src->t1, &dst->t1);
}

static void _fx_make_T2R9Ast__id_tN13K_form__dom_t(
   struct _fx_R9Ast__id_t* t0,
   struct _fx_N13K_form__dom_t* t1,
   struct _fx_T2R9Ast__id_tN13K_form__dom_t* fx_result)
{
   fx_result->t0 = *t0;
   _fx_copy_N13K_form__dom_t(t1, &fx_result->t1);
}

static void _fx_free_LT2R9Ast__id_tN13K_form__dom_t(struct _fx_LT2R9Ast__id_tN13K_form__dom_t_data_t** dst)
{
   FX_FREE_LIST_IMPL(_fx_LT2R9Ast__id_tN13K_form__dom_t, _fx_free_T2R9Ast__id_tN13K_form__dom_t);
}

static int _fx_cons_LT2R9Ast__id_tN13K_form__dom_t(
   struct _fx_T2R9Ast__id_tN13K_form__dom_t* hd,
   struct _fx_LT2R9Ast__id_tN13K_form__dom_t_data_t* tl,
   bool addref_tl,
   struct _fx_LT2R9Ast__id_tN13K_form__dom_t_data_t** fx_result)
{
   FX_MAKE_LIST_IMPL(_fx_LT2R9Ast__id_tN13K_form__dom_t, _fx_copy_T2R9Ast__id_tN13K_form__dom_t);
}

static void _fx_free_T3N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_t(
   struct _fx_T3N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_t* dst)
{
   _fx_free_N14K_form__kexp_t(&dst->t0);
   _fx_free_LT2R9Ast__id_tN13K_form__dom_t(&dst->t1);
   fx_free_list_simple(&dst->t2);
}

static void _fx_copy_T3N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_t(
   struct _fx_T3N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_t* src,
   struct _fx_T3N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   FX_COPY_PTR(src->t1, &dst->t1);
   FX_COPY_PTR(src->t2, &dst->t2);
}

static void _fx_make_T3N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_t(
   struct _fx_N14K_form__kexp_t_data_t* t0,
   struct _fx_LT2R9Ast__id_tN13K_form__dom_t_data_t* t1,
   struct _fx_LR9Ast__id_t_data_t* t2,
   struct _fx_T3N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   FX_COPY_PTR(t1, &fx_result->t1);
   FX_COPY_PTR(t2, &fx_result->t2);
}

static void _fx_free_LT3N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_t(
   struct _fx_LT3N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_t_data_t** dst)
{
   FX_FREE_LIST_IMPL(_fx_LT3N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_t,
      _fx_free_T3N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_t);
}

static int _fx_cons_LT3N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_t(
   struct _fx_T3N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_t* hd,
   struct _fx_LT3N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_t_data_t* tl,
   bool addref_tl,
   struct _fx_LT3N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_t_data_t** fx_result)
{
   FX_MAKE_LIST_IMPL(_fx_LT3N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_t,
      _fx_copy_T3N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_t);
}

static void
   _fx_free_T4LT3N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_tN14K_form__kexp_tR16Ast__for_flags_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_T4LT3N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_tN14K_form__kexp_tR16Ast__for_flags_tT2N14K_form__ktyp_tR10Ast__loc_t*
      dst)
{
   _fx_free_LT3N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_t(&dst->t0);
   _fx_free_N14K_form__kexp_t(&dst->t1);
   _fx_free_T2N14K_form__ktyp_tR10Ast__loc_t(&dst->t3);
}

static void
   _fx_copy_T4LT3N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_tN14K_form__kexp_tR16Ast__for_flags_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_T4LT3N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_tN14K_form__kexp_tR16Ast__for_flags_tT2N14K_form__ktyp_tR10Ast__loc_t*
      src,
   struct _fx_T4LT3N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_tN14K_form__kexp_tR16Ast__for_flags_tT2N14K_form__ktyp_tR10Ast__loc_t*
      dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   FX_COPY_PTR(src->t1, &dst->t1);
   dst->t2 = src->t2;
   _fx_copy_T2N14K_form__ktyp_tR10Ast__loc_t(&src->t3, &dst->t3);
}

static void
   _fx_make_T4LT3N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_tN14K_form__kexp_tR16Ast__for_flags_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_LT3N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_t_data_t* t0,
   struct _fx_N14K_form__kexp_t_data_t* t1,
   struct _fx_R16Ast__for_flags_t* t2,
   struct _fx_T2N14K_form__ktyp_tR10Ast__loc_t* t3,
   struct _fx_T4LT3N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_tN14K_form__kexp_tR16Ast__for_flags_tT2N14K_form__ktyp_tR10Ast__loc_t*
      fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   FX_COPY_PTR(t1, &fx_result->t1);
   fx_result->t2 = *t2;
   _fx_copy_T2N14K_form__ktyp_tR10Ast__loc_t(t3, &fx_result->t3);
}

static void _fx_free_T5LT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_tN14K_form__kexp_tR16Ast__for_flags_tR10Ast__loc_t(
   struct _fx_T5LT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_tN14K_form__kexp_tR16Ast__for_flags_tR10Ast__loc_t* dst)
{
   _fx_free_LT2R9Ast__id_tN13K_form__dom_t(&dst->t0);
   fx_free_list_simple(&dst->t1);
   _fx_free_N14K_form__kexp_t(&dst->t2);
}

static void _fx_copy_T5LT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_tN14K_form__kexp_tR16Ast__for_flags_tR10Ast__loc_t(
   struct _fx_T5LT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_tN14K_form__kexp_tR16Ast__for_flags_tR10Ast__loc_t* src,
   struct _fx_T5LT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_tN14K_form__kexp_tR16Ast__for_flags_tR10Ast__loc_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   FX_COPY_PTR(src->t1, &dst->t1);
   FX_COPY_PTR(src->t2, &dst->t2);
   dst->t3 = src->t3;
   dst->t4 = src->t4;
}

static void _fx_make_T5LT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_tN14K_form__kexp_tR16Ast__for_flags_tR10Ast__loc_t(
   struct _fx_LT2R9Ast__id_tN13K_form__dom_t_data_t* t0,
   struct _fx_LR9Ast__id_t_data_t* t1,
   struct _fx_N14K_form__kexp_t_data_t* t2,
   struct _fx_R16Ast__for_flags_t* t3,
   struct _fx_R10Ast__loc_t* t4,
   struct _fx_T5LT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_tN14K_form__kexp_tR16Ast__for_flags_tR10Ast__loc_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   FX_COPY_PTR(t1, &fx_result->t1);
   FX_COPY_PTR(t2, &fx_result->t2);
   fx_result->t3 = *t3;
   fx_result->t4 = *t4;
}

static void _fx_free_T3N14K_form__kexp_tN14K_form__kexp_tR10Ast__loc_t(
   struct _fx_T3N14K_form__kexp_tN14K_form__kexp_tR10Ast__loc_t* dst)
{
   _fx_free_N14K_form__kexp_t(&dst->t0);
   _fx_free_N14K_form__kexp_t(&dst->t1);
}

static void _fx_copy_T3N14K_form__kexp_tN14K_form__kexp_tR10Ast__loc_t(
   struct _fx_T3N14K_form__kexp_tN14K_form__kexp_tR10Ast__loc_t* src,
   struct _fx_T3N14K_form__kexp_tN14K_form__kexp_tR10Ast__loc_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   FX_COPY_PTR(src->t1, &dst->t1);
   dst->t2 = src->t2;
}

static void _fx_make_T3N14K_form__kexp_tN14K_form__kexp_tR10Ast__loc_t(
   struct _fx_N14K_form__kexp_t_data_t* t0,
   struct _fx_N14K_form__kexp_t_data_t* t1,
   struct _fx_R10Ast__loc_t* t2,
   struct _fx_T3N14K_form__kexp_tN14K_form__kexp_tR10Ast__loc_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   FX_COPY_PTR(t1, &fx_result->t1);
   fx_result->t2 = *t2;
}

static void _fx_free_T2ST2N14K_form__ktyp_tR10Ast__loc_t(struct _fx_T2ST2N14K_form__ktyp_tR10Ast__loc_t* dst)
{
   fx_free_str(&dst->t0);
   _fx_free_T2N14K_form__ktyp_tR10Ast__loc_t(&dst->t1);
}

static void _fx_copy_T2ST2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_T2ST2N14K_form__ktyp_tR10Ast__loc_t* src,
   struct _fx_T2ST2N14K_form__ktyp_tR10Ast__loc_t* dst)
{
   fx_copy_str(&src->t0, &dst->t0);
   _fx_copy_T2N14K_form__ktyp_tR10Ast__loc_t(&src->t1, &dst->t1);
}

static void _fx_make_T2ST2N14K_form__ktyp_tR10Ast__loc_t(
   fx_str_t* t0,
   struct _fx_T2N14K_form__ktyp_tR10Ast__loc_t* t1,
   struct _fx_T2ST2N14K_form__ktyp_tR10Ast__loc_t* fx_result)
{
   fx_copy_str(t0, &fx_result->t0);
   _fx_copy_T2N14K_form__ktyp_tR10Ast__loc_t(t1, &fx_result->t1);
}

static void _fx_free_T3R9Ast__id_tN14K_form__kexp_tR10Ast__loc_t(struct _fx_T3R9Ast__id_tN14K_form__kexp_tR10Ast__loc_t* dst)
{
   _fx_free_N14K_form__kexp_t(&dst->t1);
}

static void _fx_copy_T3R9Ast__id_tN14K_form__kexp_tR10Ast__loc_t(
   struct _fx_T3R9Ast__id_tN14K_form__kexp_tR10Ast__loc_t* src,
   struct _fx_T3R9Ast__id_tN14K_form__kexp_tR10Ast__loc_t* dst)
{
   dst->t0 = src->t0;
   FX_COPY_PTR(src->t1, &dst->t1);
   dst->t2 = src->t2;
}

static void _fx_make_T3R9Ast__id_tN14K_form__kexp_tR10Ast__loc_t(
   struct _fx_R9Ast__id_t* t0,
   struct _fx_N14K_form__kexp_t_data_t* t1,
   struct _fx_R10Ast__loc_t* t2,
   struct _fx_T3R9Ast__id_tN14K_form__kexp_tR10Ast__loc_t* fx_result)
{
   fx_result->t0 = *t0;
   FX_COPY_PTR(t1, &fx_result->t1);
   fx_result->t2 = *t2;
}

static void _fx_free_N14K_form__kexp_t(struct _fx_N14K_form__kexp_t_data_t** dst)
{
   if (*dst && FX_DECREF((*dst)->rc) == 1) {
      switch ((*dst)->tag) {
      case 4:
         _fx_free_T2Nt6option1N14K_form__atom_tR10Ast__loc_t(&(*dst)->u.KExpReturn); break;
      case 5:
         _fx_free_T2N14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(&(*dst)->u.KExpAtom); break;
      case 6:
         _fx_free_T4N13Ast__binary_tN14K_form__atom_tN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(&(*dst)->u.KExpBinary);
         break;
      case 7:
         _fx_free_T3N12Ast__unary_tN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(&(*dst)->u.KExpUnary); break;
      case 8:
         _fx_free_T3N13Ast__intrin_tLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(&(*dst)->u.KExpIntrin); break;
      case 9:
         _fx_free_T2R9Ast__id_tN14K_form__kexp_t(&(*dst)->u.KExpSync); break;
      case 10:
         _fx_free_T2LN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t(&(*dst)->u.KExpSeq); break;
      case 11:
         _fx_free_T4N14K_form__kexp_tN14K_form__kexp_tN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t(&(*dst)->u.KExpIf);
         break;
      case 12:
         _fx_free_T3R9Ast__id_tLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(&(*dst)->u.KExpCall); break;
      case 13:
         _fx_free_T4R9Ast__id_tiLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(&(*dst)->u.KExpICall); break;
      case 14:
         _fx_free_T2LN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(&(*dst)->u.KExpMkTuple); break;
      case 15:
         _fx_free_T2LN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(&(*dst)->u.KExpMkRecord); break;
      case 16:
         _fx_free_T4R9Ast__id_tR9Ast__id_tLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(&(*dst)->u.KExpMkClosure); break;
      case 17:
         _fx_free_T3BLLT2BN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(&(*dst)->u.KExpMkArray); break;
      case 18:
         _fx_free_T2LT2BN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(&(*dst)->u.KExpMkVector); break;
      case 19:
         _fx_free_T5N14K_form__atom_tN13Ast__border_tN18Ast__interpolate_tLN13K_form__dom_tT2N14K_form__ktyp_tR10Ast__loc_t(
            &(*dst)->u.KExpAt);
         break;
      case 20:
         _fx_free_T3R9Ast__id_tiT2N14K_form__ktyp_tR10Ast__loc_t(&(*dst)->u.KExpMem); break;
      case 21:
         _fx_free_T3R9Ast__id_tN14K_form__atom_tR10Ast__loc_t(&(*dst)->u.KExpAssign); break;
      case 22:
         _fx_free_T2LT2LN14K_form__kexp_tN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t(&(*dst)->u.KExpMatch); break;
      case 23:
         _fx_free_T3N14K_form__kexp_tN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t(&(*dst)->u.KExpTryCatch); break;
      case 25:
         _fx_free_T3N14K_form__atom_tN14K_form__ktyp_tR10Ast__loc_t(&(*dst)->u.KExpCast); break;
      case 26:
         _fx_free_T4LT3N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_tN14K_form__kexp_tR16Ast__for_flags_tT2N14K_form__ktyp_tR10Ast__loc_t(
            &(*dst)->u.KExpMap);
         break;
      case 27:
         _fx_free_T5LT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_tN14K_form__kexp_tR16Ast__for_flags_tR10Ast__loc_t(
            &(*dst)->u.KExpFor);
         break;
      case 28:
         _fx_free_T3N14K_form__kexp_tN14K_form__kexp_tR10Ast__loc_t(&(*dst)->u.KExpWhile); break;
      case 29:
         _fx_free_T3N14K_form__kexp_tN14K_form__kexp_tR10Ast__loc_t(&(*dst)->u.KExpDoWhile); break;
      case 30:
         _fx_free_T2ST2N14K_form__ktyp_tR10Ast__loc_t(&(*dst)->u.KExpCCode); break;
      case 31:
         _fx_free_T3R9Ast__id_tN14K_form__kexp_tR10Ast__loc_t(&(*dst)->u.KDefVal); break;
      case 32:
         _fx_free_rR17K_form__kdeffun_t(&(*dst)->u.KDefFun); break;
      case 33:
         _fx_free_rR17K_form__kdefexn_t(&(*dst)->u.KDefExn); break;
      case 34:
         _fx_free_rR21K_form__kdefvariant_t(&(*dst)->u.KDefVariant); break;
      case 35:
         _fx_free_rR23K_form__kdefinterface_t(&(*dst)->u.KDefInterface); break;
      case 36:
         _fx_free_rR17K_form__kdeftyp_t(&(*dst)->u.KDefTyp); break;
      case 37:
         _fx_free_rR25K_form__kdefclosurevars_t(&(*dst)->u.KDefClosureVars); break;
      default:
         ;
      }
      fx_free(*dst);
   }
   *dst = 0;
}

static void _fx_free_T2LT2R9Ast__id_tN14K_form__ktyp_tLR9Ast__id_t(
   struct _fx_T2LT2R9Ast__id_tN14K_form__ktyp_tLR9Ast__id_t* dst)
{
   _fx_free_LT2R9Ast__id_tN14K_form__ktyp_t(&dst->t0);
   fx_free_list_simple(&dst->t1);
}

static void _fx_copy_T2LT2R9Ast__id_tN14K_form__ktyp_tLR9Ast__id_t(
   struct _fx_T2LT2R9Ast__id_tN14K_form__ktyp_tLR9Ast__id_t* src,
   struct _fx_T2LT2R9Ast__id_tN14K_form__ktyp_tLR9Ast__id_t* dst)
{
   FX_COPY_PTR(src->t0, &dst->t0);
   FX_COPY_PTR(src->t1, &dst->t1);
}

static void _fx_make_T2LT2R9Ast__id_tN14K_form__ktyp_tLR9Ast__id_t(
   struct _fx_LT2R9Ast__id_tN14K_form__ktyp_t_data_t* t0,
   struct _fx_LR9Ast__id_t_data_t* t1,
   struct _fx_T2LT2R9Ast__id_tN14K_form__ktyp_tLR9Ast__id_t* fx_result)
{
   FX_COPY_PTR(t0, &fx_result->t0);
   FX_COPY_PTR(t1, &fx_result->t1);
}

static void _fx_free_R14Ast__pragmas_t(struct _fx_R14Ast__pragmas_t* dst)
{
   _fx_free_LT2SR10Ast__loc_t(&dst->pragma_clibs);
}

static void _fx_copy_R14Ast__pragmas_t(struct _fx_R14Ast__pragmas_t* src, struct _fx_R14Ast__pragmas_t* dst)
{
   dst->pragma_cpp = src->pragma_cpp;
   FX_COPY_PTR(src->pragma_clibs, &dst->pragma_clibs);
}

static void _fx_make_R14Ast__pragmas_t(
   bool r_pragma_cpp,
   struct _fx_LT2SR10Ast__loc_t_data_t* r_pragma_clibs,
   struct _fx_R14Ast__pragmas_t* fx_result)
{
   fx_result->pragma_cpp = r_pragma_cpp;
   FX_COPY_PTR(r_pragma_clibs, &fx_result->pragma_clibs);
}

static void _fx_free_R17K_form__kmodule_t(struct _fx_R17K_form__kmodule_t* dst)
{
   fx_free_str(&dst->km_cname);
   _fx_free_LN14K_form__kexp_t(&dst->km_top);
   fx_free_list_simple(&dst->km_deps);
   _fx_free_R14Ast__pragmas_t(&dst->km_pragmas);
}

static void _fx_copy_R17K_form__kmodule_t(struct _fx_R17K_form__kmodule_t* src, struct _fx_R17K_form__kmodule_t* dst)
{
   dst->km_name = src->km_name;
   dst->km_idx = src->km_idx;
   dst->km_toposort_idx = src->km_toposort_idx;
   fx_copy_str(&src->km_cname, &dst->km_cname);
   FX_COPY_PTR(src->km_top, &dst->km_top);
   FX_COPY_PTR(src->km_deps, &dst->km_deps);
   dst->km_skip = src->km_skip;
   dst->km_main = src->km_main;
   _fx_copy_R14Ast__pragmas_t(&src->km_pragmas, &dst->km_pragmas);
}

static void _fx_make_R17K_form__kmodule_t(
   struct _fx_R9Ast__id_t* r_km_name,
   int_ r_km_idx,
   int_ r_km_toposort_idx,
   fx_str_t* r_km_cname,
   struct _fx_LN14K_form__kexp_t_data_t* r_km_top,
   struct _fx_Li_data_t* r_km_deps,
   bool r_km_skip,
   bool r_km_main,
   struct _fx_R14Ast__pragmas_t* r_km_pragmas,
   struct _fx_R17K_form__kmodule_t* fx_result)
{
   fx_result->km_name = *r_km_name;
   fx_result->km_idx = r_km_idx;
   fx_result->km_toposort_idx = r_km_toposort_idx;
   fx_copy_str(r_km_cname, &fx_result->km_cname);
   FX_COPY_PTR(r_km_top, &fx_result->km_top);
   FX_COPY_PTR(r_km_deps, &fx_result->km_deps);
   fx_result->km_skip = r_km_skip;
   fx_result->km_main = r_km_main;
   _fx_copy_R14Ast__pragmas_t(r_km_pragmas, &fx_result->km_pragmas);
}

static void _fx_free_Ta2S(struct _fx_Ta2S* dst)
{
   fx_free_str(&dst->t0);
   fx_free_str(&dst->t1);
}

static void _fx_copy_Ta2S(struct _fx_Ta2S* src, struct _fx_Ta2S* dst)
{
   fx_copy_str(&src->t0, &dst->t0);
   fx_copy_str(&src->t1, &dst->t1);
}

static void _fx_make_Ta2S(fx_str_t* t0, fx_str_t* t1, struct _fx_Ta2S* fx_result)
{
   fx_copy_str(t0, &fx_result->t0);
   fx_copy_str(t1, &fx_result->t1);
}

static void _fx_free_LR17K_form__kmodule_t(struct _fx_LR17K_form__kmodule_t_data_t** dst)
{
   FX_FREE_LIST_IMPL(_fx_LR17K_form__kmodule_t, _fx_free_R17K_form__kmodule_t);
}

static int _fx_cons_LR17K_form__kmodule_t(
   struct _fx_R17K_form__kmodule_t* hd,
   struct _fx_LR17K_form__kmodule_t_data_t* tl,
   bool addref_tl,
   struct _fx_LR17K_form__kmodule_t_data_t** fx_result)
{
   FX_MAKE_LIST_IMPL(_fx_LR17K_form__kmodule_t, _fx_copy_R17K_form__kmodule_t);
}

static _fx_N14K_form__ktyp_t_data_t KTypString_data_1 = { 1, 10 };
_fx_N14K_form__ktyp_t _fx_g16K_pp__KTypString = &KTypString_data_1;
FX_EXTERN_C int _fx_M3AstFM6__eq__B2RM4id_tRM4id_t(
   struct _fx_R9Ast__id_t* a_0,
   struct _fx_R9Ast__id_t* b_0,
   bool* fx_result,
   void* fx_fv);

FX_EXTERN_C int _fx_M2PPFM3strv2RM1tS(struct _fx_R5PP__t* pp_0, fx_str_t* s_0, void* fx_fv);

FX_EXTERN_C int _fx_F6stringS1i(int_ a, fx_str_t* fx_result, void* fx_fv);

FX_EXTERN_C int _fx_M3AstFM11compile_errE2RM5loc_tS(
   struct _fx_R10Ast__loc_t* loc_0,
   fx_str_t* msg_0,
   fx_exn_t* fx_result,
   void* fx_fv);

FX_EXTERN_C int _fx_M2PPFM5beginv1RM1t(struct _fx_R5PP__t* pp_0, void* fx_fv);

static int _fx_M4K_ppFM7ppktyp_v4N14K_form__ktyp_tiR10Ast__loc_tR5PP__t(
   struct _fx_N14K_form__ktyp_t_data_t* t_0,
   int_ prec_0,
   struct _fx_R10Ast__loc_t* loc_0,
   struct _fx_R5PP__t* pp_0,
   void* fx_fv);

FX_EXTERN_C int _fx_M6K_formFM9KTypTupleN14K_form__ktyp_t1LN14K_form__ktyp_t(
   struct _fx_LN14K_form__ktyp_t_data_t* arg0,
   struct _fx_N14K_form__ktyp_t_data_t** fx_result);

FX_EXTERN_C int _fx_M2PPFM5spacev1RM1t(struct _fx_R5PP__t* pp_0, void* fx_fv);

FX_EXTERN_C int _fx_M2PPFM3endv1RM1t(struct _fx_R5PP__t* pp_0, void* fx_fv);

static int _fx_M4K_ppFM9ppktypsufv6N14K_form__ktyp_tSR10Ast__loc_tiR5PP__ti(
   struct _fx_N14K_form__ktyp_t_data_t* t1_0,
   fx_str_t* suf_0,
   struct _fx_R10Ast__loc_t* loc_0,
   int_ p1_0,
   struct _fx_R5PP__t* pp_0,
   int_ prec_0,
   void* fx_fv);

FX_EXTERN_C int _fx_F7__mul__S2Ci(char_ c, int_ n, fx_str_t* fx_result, void* fx_fv);

FX_EXTERN_C int _fx_M6K_formFM7idk2strS2R9Ast__id_tR10Ast__loc_t(
   struct _fx_R9Ast__id_t* n_0,
   struct _fx_R10Ast__loc_t* loc_0,
   fx_str_t* fx_result,
   void* fx_fv);

static int _fx_M4K_ppFM11ppktyplist_v4SLN14K_form__ktyp_tR10Ast__loc_tR5PP__t(
   fx_str_t* prefix_0,
   struct _fx_LN14K_form__ktyp_t_data_t* args_0,
   struct _fx_R10Ast__loc_t* loc_0,
   struct _fx_R5PP__t* pp_0,
   void* fx_fv);

FX_EXTERN_C int _fx_M2PPFM3cutv1RM1t(struct _fx_R5PP__t* pp_0, void* fx_fv);

FX_EXTERN_C int _fx_M6K_formFM8klit2strS3N14K_form__klit_tBR10Ast__loc_t(
   struct _fx_N14K_form__klit_t* lit_0,
   bool cmode_0,
   struct _fx_R10Ast__loc_t* loc_0,
   fx_str_t* fx_result,
   void* fx_fv);

FX_EXTERN_C int _fx_M6K_formFM12get_kexp_locR10Ast__loc_t1N14K_form__kexp_t(
   struct _fx_N14K_form__kexp_t_data_t* e_0,
   struct _fx_R10Ast__loc_t* fx_result,
   void* fx_fv);

FX_EXTERN_C int _fx_M2PPFM6beginvv1RM1t(struct _fx_R5PP__t* pp_0, void* fx_fv);

FX_EXTERN_C int _fx_M6K_formFM8get_kvalRM9kdefval_t2R9Ast__id_tR10Ast__loc_t(
   struct _fx_R9Ast__id_t* n_0,
   struct _fx_R10Ast__loc_t* loc_0,
   struct _fx_R17K_form__kdefval_t* fx_result,
   void* fx_fv);

FX_EXTERN_C int _fx_M6Ast_ppFM16pprint_val_flagsv2R5PP__tR16Ast__val_flags_t(
   struct _fx_R5PP__t* pp_0,
   struct _fx_R16Ast__val_flags_t* flags_0,
   void* fx_fv);

static int _fx_M4K_ppFM9pp_idtyp_v5R9Ast__id_tN14K_form__ktyp_tBR10Ast__loc_tR5PP__t(
   struct _fx_R9Ast__id_t* i_0,
   struct _fx_N14K_form__ktyp_t_data_t* t_0,
   bool detailed_0,
   struct _fx_R10Ast__loc_t* eloc_0,
   struct _fx_R5PP__t* pp_0,
   void* fx_fv);

static int _fx_M4K_ppFM7pp_exp_v2N14K_form__kexp_tR5PP__t(
   struct _fx_N14K_form__kexp_t_data_t* e_0,
   struct _fx_R5PP__t* pp_0,
   void* fx_fv);

FX_EXTERN_C int _fx_M2PPFM6beginvv2RM1ti(struct _fx_R5PP__t* pp_0, int_ indent_0, void* fx_fv);

FX_EXTERN_C int _fx_M6Ast_ppFM16pprint_fun_flagsv2R5PP__tR16Ast__fun_flags_t(
   struct _fx_R5PP__t* pp_0,
   struct _fx_R16Ast__fun_flags_t* flags_0,
   void* fx_fv);

static int _fx_M4K_ppFM6pp_id_v3R9Ast__id_tR10Ast__loc_tR5PP__t(
   struct _fx_R9Ast__id_t* i_0,
   struct _fx_R10Ast__loc_t* eloc_0,
   struct _fx_R5PP__t* pp_0,
   void* fx_fv);

FX_EXTERN_C_VAL(struct _fx_R9Ast__id_t _fx_g9Ast__noid)
FX_EXTERN_C int _fx_M6K_formFM8KTypNameN14K_form__ktyp_t1R9Ast__id_t(
   struct _fx_R9Ast__id_t* arg0,
   struct _fx_N14K_form__ktyp_t_data_t** fx_result);

static int _fx_M4K_ppFM8pp_ktyp_v3N14K_form__ktyp_tR10Ast__loc_tR5PP__t(
   struct _fx_N14K_form__ktyp_t_data_t* t_0,
   struct _fx_R10Ast__loc_t* eloc_0,
   struct _fx_R5PP__t* pp_0,
   void* fx_fv);

static int _fx_M4K_ppFM16pp_exp_as_block_v4N14K_form__kexp_tBBR5PP__t(
   struct _fx_N14K_form__kexp_t_data_t* e_0,
   bool flow_0,
   bool closing_0,
   struct _fx_R5PP__t* pp_0,
   void* fx_fv);

FX_EXTERN_C int _fx_M3AstFM8ctor2strS1N17Ast__fun_constr_t(
   struct _fx_N17Ast__fun_constr_t* f_0,
   fx_str_t* fx_result,
   void* fx_fv);

FX_EXTERN_C int _fx_M2PPFM7newlinev1RM1t(struct _fx_R5PP__t* pp_0, void* fx_fv);

static int _fx_M4K_ppFM5ppktpv2Nt6option1R17K_form__ktprops_tR5PP__t(
   struct _fx_Nt6option1R17K_form__ktprops_t* ktp_0,
   struct _fx_R5PP__t* pp_0,
   void* fx_fv);

static int _fx_M4K_ppFM17pp_ktyp_detailed_v3N14K_form__ktyp_tR10Ast__loc_tR5PP__t(
   struct _fx_N14K_form__ktyp_t_data_t* t_0,
   struct _fx_R10Ast__loc_t* eloc_0,
   struct _fx_R5PP__t* pp_0,
   void* fx_fv);

FX_EXTERN_C void _fx_M6K_formFM10KLitStringN14K_form__klit_t1S(fx_str_t* arg0, struct _fx_N14K_form__klit_t* fx_result);

FX_EXTERN_C void _fx_M6K_formFM7AtomLitN14K_form__atom_t1N14K_form__klit_t(
   struct _fx_N14K_form__klit_t* arg0,
   struct _fx_N14K_form__atom_t* fx_result);

FX_EXTERN_C int _fx_M6K_formFM8KExpAtomN14K_form__kexp_t2N14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_N14K_form__atom_t* arg0,
   struct _fx_T2N14K_form__ktyp_tR10Ast__loc_t* arg1,
   struct _fx_N14K_form__kexp_t_data_t** fx_result);

static int _fx_M4K_ppFM8pp_atom_v3N14K_form__atom_tR10Ast__loc_tR5PP__t(
   struct _fx_N14K_form__atom_t* a_0,
   struct _fx_R10Ast__loc_t* eloc_0,
   struct _fx_R5PP__t* pp_0,
   void* fx_fv);

FX_EXTERN_C int _fx_M3AstFM6stringS1N13Ast__binary_t(
   struct _fx_N13Ast__binary_t_data_t* bop_0,
   fx_str_t* fx_result,
   void* fx_fv);

FX_EXTERN_C int _fx_M6K_formFM12get_idk_ktypN14K_form__ktyp_t2R9Ast__id_tR10Ast__loc_t(
   struct _fx_R9Ast__id_t* n_0,
   struct _fx_R10Ast__loc_t* loc_0,
   struct _fx_N14K_form__ktyp_t_data_t** fx_result,
   void* fx_fv);

FX_EXTERN_C int _fx_M3AstFM2ppS1RM4id_t(struct _fx_R9Ast__id_t* i_0, fx_str_t* fx_result, void* fx_fv);

FX_EXTERN_C int _fx_M3AstFM6stringS1N12Ast__unary_t(struct _fx_N12Ast__unary_t* uop_0, fx_str_t* fx_result, void* fx_fv);

FX_EXTERN_C int _fx_M3AstFM6stringS1N13Ast__intrin_t(struct _fx_N13Ast__intrin_t* iop_0, fx_str_t* fx_result, void* fx_fv);

static int _fx_M4K_ppFM8ppatoms_v3LN14K_form__atom_tR10Ast__loc_tR5PP__t(
   struct _fx_LN14K_form__atom_t_data_t* al_0,
   struct _fx_R10Ast__loc_t* eloc_0,
   struct _fx_R5PP__t* pp_0,
   void* fx_fv);

FX_EXTERN_C int _fx_M6K_formFM6kinfo_N15K_form__kinfo_t2R9Ast__id_tR10Ast__loc_t(
   struct _fx_R9Ast__id_t* n_0,
   struct _fx_R10Ast__loc_t* loc_0,
   struct _fx_N15K_form__kinfo_t* fx_result,
   void* fx_fv);

FX_EXTERN_C int _fx_M6K_formFM6stringS1N14K_form__ktyp_t(
   struct _fx_N14K_form__ktyp_t_data_t* t_0,
   fx_str_t* fx_result,
   void* fx_fv);

FX_EXTERN_C int _fx_M2PPFM6breakuv1RM1t(struct _fx_R5PP__t* pp_0, void* fx_fv);

FX_EXTERN_C int _fx_M2PPFM6breakiv1RM1t(struct _fx_R5PP__t* pp_0, void* fx_fv);

FX_EXTERN_C int _fx_M6K_formFM20get_closure_freevarsT2LT2R9Ast__id_tN14K_form__ktyp_tLR9Ast__id_t2R9Ast__id_tR10Ast__loc_t(
   struct _fx_R9Ast__id_t* f_0,
   struct _fx_R10Ast__loc_t* loc_0,
   struct _fx_T2LT2R9Ast__id_tN14K_form__ktyp_tLR9Ast__id_t* fx_result,
   void* fx_fv);

FX_EXTERN_C int _fx_M6K_formFM18get_kinterface_optNt6option1rRM15kdefinterface_t2N14K_form__ktyp_tR10Ast__loc_t(
   struct _fx_N14K_form__ktyp_t_data_t* t_0,
   struct _fx_R10Ast__loc_t* loc_0,
   struct _fx_Nt6option1rR23K_form__kdefinterface_t* fx_result,
   void* fx_fv);

FX_EXTERN_C int _fx_M3AstFM10border2strS2N13Ast__border_tB(
   struct _fx_N13Ast__border_t* border_0,
   bool f_0,
   fx_str_t* fx_result,
   void* fx_fv);

FX_EXTERN_C int _fx_M3AstFM10interp2strS2N18Ast__interpolate_tB(
   struct _fx_N18Ast__interpolate_t* interp_0,
   bool f_0,
   fx_str_t* fx_result,
   void* fx_fv);

static int _fx_M4K_ppFM7pp_dom_v3N13K_form__dom_tR10Ast__loc_tR5PP__t(
   struct _fx_N13K_form__dom_t* r_0,
   struct _fx_R10Ast__loc_t* eloc_0,
   struct _fx_R5PP__t* pp_0,
   void* fx_fv);

static int _fx_M4K_ppFM11pp_if_chainv3N14K_form__kexp_tBR5PP__t(
   struct _fx_N14K_form__kexp_t_data_t* e_0,
   bool start_0,
   struct _fx_R5PP__t* pp_0,
   void* fx_fv);

FX_EXTERN_C int _fx_M6Ast_ppFM16pprint_for_flagsv2R5PP__tR16Ast__for_flags_t(
   struct _fx_R5PP__t* pp_0,
   struct _fx_R16Ast__for_flags_t* flags_0,
   void* fx_fv);

FX_EXTERN_C int _fx_M6K_formFM7KExpNopN14K_form__kexp_t1R10Ast__loc_t(
   struct _fx_R10Ast__loc_t* arg0,
   struct _fx_N14K_form__kexp_t_data_t** fx_result);

static int _fx_M4K_ppFM11pp_for_hdr_v5N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_tR10Ast__loc_tR5PP__t(
   struct _fx_N14K_form__kexp_t_data_t* pre_exp_0,
   struct _fx_LT2R9Ast__id_tN13K_form__dom_t_data_t* for_cl_0,
   struct _fx_LR9Ast__id_t_data_t* at_ids_0,
   struct _fx_R10Ast__loc_t* eloc_0,
   struct _fx_R5PP__t* pp_0,
   void* fx_fv);

FX_EXTERN_C int _fx_M3AstFM6stringS1N15Ast__for_make_t(struct _fx_N15Ast__for_make_t* fm_0, fx_str_t* fx_result, void* fx_fv);

FX_EXTERN_C int _fx_M6K_formFM12get_kexp_ctxT2N14K_form__ktyp_tR10Ast__loc_t1N14K_form__kexp_t(
   struct _fx_N14K_form__kexp_t_data_t* e_0,
   struct _fx_T2N14K_form__ktyp_tR10Ast__loc_t* fx_result,
   void* fx_fv);

FX_EXTERN_C int _fx_M2PPFM8opt_semiv1RM1t(struct _fx_R5PP__t* pp_0, void* fx_fv);

FX_EXTERN_C_VAL(struct _fx_R7File__t _fx_g12File__stdout)
FX_EXTERN_C int _fx_M4FileFM5flushv1RM1t(struct _fx_R7File__t* f, void* fx_fv);

FX_EXTERN_C int _fx_M2PPFM16pprint_to_stdoutRM1t2ii(
   int_ margin_0,
   int_ default_indent_0,
   struct _fx_R5PP__t* fx_result,
   void* fx_fv);

FX_EXTERN_C int _fx_M2PPFM5flushv1RM1t(struct _fx_R5PP__t* pp_0, void* fx_fv);

FX_EXTERN_C void _fx_F12print_stringv1S(fx_str_t* a, void* fx_fv);

FX_EXTERN_C int _fx_M2PPFM21pprint_to_string_listRM1t2ii(
   int_ margin_0,
   int_ default_indent_0,
   struct _fx_R5PP__t* fx_result,
   void* fx_fv);

FX_EXTERN_C int _fx_M2PPFM6break0v1RM1t(struct _fx_R5PP__t* pp_0, void* fx_fv);

FX_EXTERN_C int _fx_F12join_embraceS4SSSLS(
   fx_str_t* begin_0,
   fx_str_t* end_0,
   fx_str_t* sep_0,
   struct _fx_LS_data_t* strs_0,
   fx_str_t* fx_result,
   void* fx_fv);

FX_EXTERN_C int _fx_M4K_ppFM6__ne__B2R9Ast__id_tR9Ast__id_t(
   struct _fx_R9Ast__id_t* a_0,
   struct _fx_R9Ast__id_t* b_0,
   bool* fx_result,
   void* fx_fv)
{
   int fx_status = 0;
   bool res_0;
   FX_CALL(_fx_M3AstFM6__eq__B2RM4id_tRM4id_t(a_0, b_0, &res_0, 0), _fx_cleanup);
   *fx_result = !res_0;

_fx_cleanup: ;
   return fx_status;
}

FX_EXTERN_C int_ _fx_M4K_ppFM6lengthi1LN14K_form__kexp_t(struct _fx_LN14K_form__kexp_t_data_t* l, void* fx_fv)
{
   
return fx_list_length(l);

}

FX_EXTERN_C int_ _fx_M4K_ppFM6lengthi1LLT2BN14K_form__atom_t(struct _fx_LLT2BN14K_form__atom_t_data_t* l, void* fx_fv)
{
   
return fx_list_length(l);

}

FX_EXTERN_C int_ _fx_M4K_ppFM6lengthi1LT2R9Ast__id_tN14K_form__ktyp_t(
   struct _fx_LT2R9Ast__id_tN14K_form__ktyp_t_data_t* l,
   void* fx_fv)
{
   
return fx_list_length(l);

}

FX_EXTERN_C int_ _fx_M4K_ppFM6lengthi1LR9Ast__id_t(struct _fx_LR9Ast__id_t_data_t* l, void* fx_fv)
{
   
return fx_list_length(l);

}

FX_EXTERN_C int _fx_M4K_ppFM8length1_i1LLT2BN14K_form__atom_t(
   struct _fx_LLT2BN14K_form__atom_t_data_t* l_0,
   int_* fx_result,
   void* fx_fv)
{
   int fx_status = 0;
   *fx_result = _fx_M4K_ppFM6lengthi1LLT2BN14K_form__atom_t(l_0, 0);
   return fx_status;
}

FX_EXTERN_C int _fx_M4K_ppFM8length1_i1LT2R9Ast__id_tN14K_form__ktyp_t(
   struct _fx_LT2R9Ast__id_tN14K_form__ktyp_t_data_t* l_0,
   int_* fx_result,
   void* fx_fv)
{
   int fx_status = 0;
   *fx_result = _fx_M4K_ppFM6lengthi1LT2R9Ast__id_tN14K_form__ktyp_t(l_0, 0);
   return fx_status;
}

FX_EXTERN_C int _fx_M4K_ppFM8length1_i1LR9Ast__id_t(struct _fx_LR9Ast__id_t_data_t* l_0, int_* fx_result, void* fx_fv)
{
   int fx_status = 0;
   *fx_result = _fx_M4K_ppFM6lengthi1LR9Ast__id_t(l_0, 0);
   return fx_status;
}

FX_EXTERN_C int _fx_M4K_ppFM3nthT2R9Ast__id_tN14K_form__ktyp_t2LT2R9Ast__id_tN14K_form__ktyp_ti(
   struct _fx_LT2R9Ast__id_tN14K_form__ktyp_t_data_t* l_0,
   int_ n_0,
   struct _fx_T2R9Ast__id_tN14K_form__ktyp_t* fx_result,
   void* fx_fv)
{
   _fx_T2R9Ast__id_tN14K_form__ktyp_t result_0 = {0};
   _fx_LT2R9Ast__id_tN14K_form__ktyp_t l_1 = 0;
   int fx_status = 0;
   FX_COPY_PTR(l_0, &l_1);
   int_ n_1 = n_0;
   for (;;) {
      _fx_LT2R9Ast__id_tN14K_form__ktyp_t l_2 = 0;
      FX_COPY_PTR(l_1, &l_2);
      int_ n_2 = n_1;
      if (l_2 != 0) {
         if (n_2 == 0) {
            _fx_T2R9Ast__id_tN14K_form__ktyp_t* a_0 = &l_2->hd;
            _fx_free_T2R9Ast__id_tN14K_form__ktyp_t(&result_0);
            _fx_copy_T2R9Ast__id_tN14K_form__ktyp_t(a_0, &result_0);
            FX_BREAK(_fx_catch_0);
         }
         else {
            _fx_LT2R9Ast__id_tN14K_form__ktyp_t* rest_0 = &l_2->tl;
            _fx_free_LT2R9Ast__id_tN14K_form__ktyp_t(&l_1);
            FX_COPY_PTR(*rest_0, &l_1);
            n_1 = n_2 - 1;
         }

      _fx_catch_0: ;
      }
      else {
         FX_FAST_THROW(FX_EXN_OutOfRangeError, _fx_catch_1);
      }
      FX_CHECK_EXN(_fx_catch_1);

   _fx_catch_1: ;
      if (l_2) {
         _fx_free_LT2R9Ast__id_tN14K_form__ktyp_t(&l_2);
      }
      FX_CHECK_BREAK();
      FX_CHECK_EXN(_fx_cleanup);
   }
   _fx_copy_T2R9Ast__id_tN14K_form__ktyp_t(&result_0, fx_result);

_fx_cleanup: ;
   _fx_free_T2R9Ast__id_tN14K_form__ktyp_t(&result_0);
   if (l_1) {
      _fx_free_LT2R9Ast__id_tN14K_form__ktyp_t(&l_1);
   }
   return fx_status;
}

FX_EXTERN_C int _fx_M4K_ppFM8pp_ktyp_v5R5PP__tN14K_form__ktyp_tiR10Ast__loc_tB(
   struct _fx_R5PP__t* pp_0,
   struct _fx_N14K_form__ktyp_t_data_t* t_0,
   int_ p1_0,
   struct _fx_R10Ast__loc_t* loc_0,
   bool detailed_0,
   void* fx_fv)
{
   int fx_status = 0;
   FX_CALL(fx_check_stack(), _fx_cleanup);
   int tag_0 = FX_REC_VARIANT_TAG(t_0);
   int_ prec_0;
   bool res_0;
   if (tag_0 == 1) {
      res_0 = true;
   }
   else if (tag_0 == 6) {
      res_0 = true;
   }
   else if (tag_0 == 2) {
      res_0 = true;
   }
   else if (tag_0 == 3) {
      res_0 = true;
   }
   else if (tag_0 == 4) {
      res_0 = true;
   }
   else if (tag_0 == 5) {
      res_0 = true;
   }
   else if (tag_0 == 10) {
      res_0 = true;
   }
   else if (tag_0 == 9) {
      res_0 = true;
   }
   else if (tag_0 == 8) {
      res_0 = true;
   }
   else if (tag_0 == 7) {
      res_0 = true;
   }
   else if (tag_0 == 21) {
      res_0 = true;
   }
   else if (tag_0 == 22) {
      res_0 = true;
   }
   else if (tag_0 == 11) {
      res_0 = true;
   }
   else if (tag_0 == 23) {
      res_0 = true;
   }
   else if (tag_0 == 16) {
      res_0 = true;
   }
   else if (tag_0 == 14) {
      res_0 = true;
   }
   else if (tag_0 == 15) {
      res_0 = true;
   }
   else {
      res_0 = false;
   }
   FX_CHECK_EXN(_fx_cleanup);
   if (res_0) {
      prec_0 = 3; goto _fx_endmatch_0;
   }
   bool res_1;
   if (tag_0 == 19) {
      res_1 = true;
   }
   else if (tag_0 == 20) {
      res_1 = true;
   }
   else if (tag_0 == 17) {
      res_1 = true;
   }
   else if (tag_0 == 18) {
      res_1 = true;
   }
   else if (tag_0 == 12) {
      res_1 = true;
   }
   else {
      res_1 = false;
   }
   FX_CHECK_EXN(_fx_cleanup);
   if (res_1) {
      prec_0 = 2; goto _fx_endmatch_0;
   }
   if (tag_0 == 13) {
      prec_0 = 1; goto _fx_endmatch_0;
   }
   FX_FAST_THROW(FX_EXN_NoMatchError, _fx_cleanup);

_fx_endmatch_0: ;
   FX_CHECK_EXN(_fx_cleanup);
   int tag_1 = FX_REC_VARIANT_TAG(t_0);
   if (tag_1 == 1) {
      fx_str_t slit_0 = FX_MAKE_STR("int");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_0, 0), _fx_catch_0);

   _fx_catch_0: ;
      goto _fx_endmatch_2;
   }
   if (tag_1 == 6) {
      fx_str_t slit_1 = FX_MAKE_STR("long");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_1, 0), _fx_catch_1);

   _fx_catch_1: ;
      goto _fx_endmatch_2;
   }
   if (tag_1 == 2) {
      fx_str_t slit_2 = FX_MAKE_STR("int32");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_2, 0), _fx_catch_2);

   _fx_catch_2: ;
      goto _fx_endmatch_2;
   }
   if (tag_1 == 3) {
      fx_str_t v_0 = {0};
      fx_str_t v_1 = {0};
      FX_CALL(_fx_F6stringS1i(t_0->u.KTypSInt, &v_0, 0), _fx_catch_3);
      fx_str_t slit_3 = FX_MAKE_STR("int");
      {
         const fx_str_t strs_0[] = { slit_3, v_0 };
         FX_CALL(fx_strjoin(0, 0, 0, strs_0, 2, &v_1), _fx_catch_3);
      }
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &v_1, 0), _fx_catch_3);

   _fx_catch_3: ;
      FX_FREE_STR(&v_1);
      FX_FREE_STR(&v_0);
      goto _fx_endmatch_2;
   }
   if (tag_1 == 4) {
      fx_str_t v_2 = {0};
      fx_str_t v_3 = {0};
      FX_CALL(_fx_F6stringS1i(t_0->u.KTypUInt, &v_2, 0), _fx_catch_4);
      fx_str_t slit_4 = FX_MAKE_STR("uint");
      {
         const fx_str_t strs_1[] = { slit_4, v_2 };
         FX_CALL(fx_strjoin(0, 0, 0, strs_1, 2, &v_3), _fx_catch_4);
      }
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &v_3, 0), _fx_catch_4);

   _fx_catch_4: ;
      FX_FREE_STR(&v_3);
      FX_FREE_STR(&v_2);
      goto _fx_endmatch_2;
   }
   if (tag_1 == 5) {
      if (t_0->u.KTypFloat == 16) {
         fx_str_t slit_5 = FX_MAKE_STR("half");
         FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_5, 0), _fx_catch_5);

      _fx_catch_5: ;
         goto _fx_endmatch_2;
      }
   }
   if (tag_1 == 5) {
      if (t_0->u.KTypFloat == 32) {
         fx_str_t slit_6 = FX_MAKE_STR("float");
         FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_6, 0), _fx_catch_6);

      _fx_catch_6: ;
         goto _fx_endmatch_2;
      }
   }
   if (tag_1 == 5) {
      if (t_0->u.KTypFloat == 64) {
         fx_str_t slit_7 = FX_MAKE_STR("double");
         FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_7, 0), _fx_catch_7);

      _fx_catch_7: ;
         goto _fx_endmatch_2;
      }
   }
   if (tag_1 == 5) {
      fx_str_t v_4 = {0};
      fx_str_t v_5 = {0};
      fx_exn_t v_6 = {0};
      FX_CALL(_fx_F6stringS1i(t_0->u.KTypFloat, &v_4, 0), _fx_catch_8);
      fx_str_t slit_8 = FX_MAKE_STR("K_pp: invalid type TypFloat(");
      fx_str_t slit_9 = FX_MAKE_STR(")");
      {
         const fx_str_t strs_2[] = { slit_8, v_4, slit_9 };
         FX_CALL(fx_strjoin(0, 0, 0, strs_2, 3, &v_5), _fx_catch_8);
      }
      FX_CALL(_fx_M3AstFM11compile_errE2RM5loc_tS(loc_0, &v_5, &v_6, 0), _fx_catch_8);
      FX_THROW(&v_6, false, _fx_catch_8);

   _fx_catch_8: ;
      fx_free_exn(&v_6);
      FX_FREE_STR(&v_5);
      FX_FREE_STR(&v_4);
      goto _fx_endmatch_2;
   }
   if (tag_1 == 10) {
      fx_str_t slit_10 = FX_MAKE_STR("string");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_10, 0), _fx_catch_9);

   _fx_catch_9: ;
      goto _fx_endmatch_2;
   }
   if (tag_1 == 9) {
      fx_str_t slit_11 = FX_MAKE_STR("char");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_11, 0), _fx_catch_10);

   _fx_catch_10: ;
      goto _fx_endmatch_2;
   }
   if (tag_1 == 8) {
      fx_str_t slit_12 = FX_MAKE_STR("bool");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_12, 0), _fx_catch_11);

   _fx_catch_11: ;
      goto _fx_endmatch_2;
   }
   if (tag_1 == 7) {
      fx_str_t slit_13 = FX_MAKE_STR("void");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_13, 0), _fx_catch_12);

   _fx_catch_12: ;
      goto _fx_endmatch_2;
   }
   if (tag_1 == 13) {
      _fx_T2LN14K_form__ktyp_tN14K_form__ktyp_t* vcase_0 = &t_0->u.KTypFun;
      _fx_LN14K_form__ktyp_t tl_0 = vcase_0->t0;
      FX_CALL(_fx_M2PPFM5beginv1RM1t(pp_0, 0), _fx_catch_16);
      fx_str_t slit_14 = FX_MAKE_STR("(");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_14, 0), _fx_catch_16);
      if (tl_0 == 0) {
         fx_str_t slit_15 = FX_MAKE_STR("void");
         FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_15, 0), _fx_catch_13);

      _fx_catch_13: ;
         goto _fx_endmatch_1;
      }
      if (tl_0 != 0) {
         if (tl_0->tl == 0) {
            FX_CALL(_fx_M4K_ppFM7ppktyp_v4N14K_form__ktyp_tiR10Ast__loc_tR5PP__t(tl_0->hd, prec_0, loc_0, pp_0, 0),
               _fx_catch_14);

         _fx_catch_14: ;
            goto _fx_endmatch_1;
         }
      }
      _fx_N14K_form__ktyp_t v_7 = 0;
      FX_CALL(_fx_M6K_formFM9KTypTupleN14K_form__ktyp_t1LN14K_form__ktyp_t(tl_0, &v_7), _fx_catch_15);
      FX_CALL(_fx_M4K_ppFM7ppktyp_v4N14K_form__ktyp_tiR10Ast__loc_tR5PP__t(v_7, prec_0, loc_0, pp_0, 0), _fx_catch_15);

   _fx_catch_15: ;
      if (v_7) {
         _fx_free_N14K_form__ktyp_t(&v_7);
      }

   _fx_endmatch_1: ;
      FX_CHECK_EXN(_fx_catch_16);
      FX_CALL(_fx_M2PPFM5spacev1RM1t(pp_0, 0), _fx_catch_16);
      fx_str_t slit_16 = FX_MAKE_STR("->");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_16, 0), _fx_catch_16);
      FX_CALL(_fx_M2PPFM5spacev1RM1t(pp_0, 0), _fx_catch_16);
      FX_CALL(_fx_M4K_ppFM7ppktyp_v4N14K_form__ktyp_tiR10Ast__loc_tR5PP__t(vcase_0->t1, prec_0, loc_0, pp_0, 0), _fx_catch_16);
      fx_str_t slit_17 = FX_MAKE_STR(")");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_17, 0), _fx_catch_16);
      FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_catch_16);

   _fx_catch_16: ;
      goto _fx_endmatch_2;
   }
   if (tag_1 == 19) {
      fx_str_t slit_18 = FX_MAKE_STR("list");
      FX_CALL(
         _fx_M4K_ppFM9ppktypsufv6N14K_form__ktyp_tSR10Ast__loc_tiR5PP__ti(t_0->u.KTypList, &slit_18, loc_0, p1_0, pp_0, prec_0,
            0), _fx_catch_17);

   _fx_catch_17: ;
      goto _fx_endmatch_2;
   }
   if (tag_1 == 18) {
      fx_str_t slit_19 = FX_MAKE_STR("vector");
      FX_CALL(
         _fx_M4K_ppFM9ppktypsufv6N14K_form__ktyp_tSR10Ast__loc_tiR5PP__ti(t_0->u.KTypVector, &slit_19, loc_0, p1_0, pp_0,
            prec_0, 0), _fx_catch_18);

   _fx_catch_18: ;
      goto _fx_endmatch_2;
   }
   if (tag_1 == 20) {
      fx_str_t slit_20 = FX_MAKE_STR("ref");
      FX_CALL(
         _fx_M4K_ppFM9ppktypsufv6N14K_form__ktyp_tSR10Ast__loc_tiR5PP__ti(t_0->u.KTypRef, &slit_20, loc_0, p1_0, pp_0, prec_0,
            0), _fx_catch_19);

   _fx_catch_19: ;
      goto _fx_endmatch_2;
   }
   if (tag_1 == 17) {
      fx_str_t v_8 = {0};
      fx_str_t v_9 = {0};
      _fx_T2iN14K_form__ktyp_t* vcase_1 = &t_0->u.KTypArray;
      FX_CALL(_fx_F7__mul__S2Ci((char_)44, vcase_1->t0 - 1, &v_8, 0), _fx_catch_20);
      fx_str_t slit_21 = FX_MAKE_STR("[");
      fx_str_t slit_22 = FX_MAKE_STR("]");
      {
         const fx_str_t strs_3[] = { slit_21, v_8, slit_22 };
         FX_CALL(fx_strjoin(0, 0, 0, strs_3, 3, &v_9), _fx_catch_20);
      }
      FX_CALL(_fx_M4K_ppFM9ppktypsufv6N14K_form__ktyp_tSR10Ast__loc_tiR5PP__ti(vcase_1->t1, &v_9, loc_0, p1_0, pp_0, prec_0, 0),
         _fx_catch_20);

   _fx_catch_20: ;
      FX_FREE_STR(&v_9);
      FX_FREE_STR(&v_8);
      goto _fx_endmatch_2;
   }
   if (tag_1 == 16) {
      fx_str_t v_10 = {0};
      FX_CALL(_fx_M6K_formFM7idk2strS2R9Ast__id_tR10Ast__loc_t(&t_0->u.KTypName, loc_0, &v_10, 0), _fx_catch_21);
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &v_10, 0), _fx_catch_21);

   _fx_catch_21: ;
      FX_FREE_STR(&v_10);
      goto _fx_endmatch_2;
   }
   if (tag_1 == 14) {
      fx_str_t slit_23 = FX_MAKE_STR("(");
      FX_CALL(_fx_M4K_ppFM11ppktyplist_v4SLN14K_form__ktyp_tR10Ast__loc_tR5PP__t(&slit_23, t_0->u.KTypTuple, loc_0, pp_0, 0),
         _fx_catch_22);

   _fx_catch_22: ;
      goto _fx_endmatch_2;
   }
   if (tag_1 == 15) {
      fx_str_t v_11 = {0};
      _fx_LT2R9Ast__id_tN14K_form__ktyp_t relems_0 = 0;
      _fx_T2R9Ast__id_tLT2R9Ast__id_tN14K_form__ktyp_t* vcase_2 = &t_0->u.KTypRecord;
      FX_CALL(_fx_M2PPFM5beginv1RM1t(pp_0, 0), _fx_catch_24);
      FX_CALL(_fx_M6K_formFM7idk2strS2R9Ast__id_tR10Ast__loc_t(&vcase_2->t0, loc_0, &v_11, 0), _fx_catch_24);
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &v_11, 0), _fx_catch_24);
      if (detailed_0) {
         fx_str_t slit_24 = FX_MAKE_STR(" {");
         FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_24, 0), _fx_catch_24);
         int_ i_0 = 0;
         FX_COPY_PTR(vcase_2->t1, &relems_0);
         _fx_LT2R9Ast__id_tN14K_form__ktyp_t lst_0 = relems_0;
         for (; lst_0; lst_0 = lst_0->tl, i_0 += 1) {
            _fx_N14K_form__ktyp_t ti_0 = 0;
            fx_str_t v_12 = {0};
            _fx_T2R9Ast__id_tN14K_form__ktyp_t* __pat___0 = &lst_0->hd;
            _fx_R9Ast__id_t ni_0 = __pat___0->t0;
            FX_COPY_PTR(__pat___0->t1, &ti_0);
            if (i_0 != 0) {
               fx_str_t slit_25 = FX_MAKE_STR(",");
               FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_25, 0), _fx_catch_23);
               FX_CALL(_fx_M2PPFM5spacev1RM1t(pp_0, 0), _fx_catch_23);
            }
            FX_CALL(_fx_M6K_formFM7idk2strS2R9Ast__id_tR10Ast__loc_t(&ni_0, loc_0, &v_12, 0), _fx_catch_23);
            FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &v_12, 0), _fx_catch_23);
            fx_str_t slit_26 = FX_MAKE_STR(": ");
            FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_26, 0), _fx_catch_23);
            FX_CALL(_fx_M4K_ppFM7ppktyp_v4N14K_form__ktyp_tiR10Ast__loc_tR5PP__t(ti_0, 0, loc_0, pp_0, 0), _fx_catch_23);

         _fx_catch_23: ;
            FX_FREE_STR(&v_12);
            if (ti_0) {
               _fx_free_N14K_form__ktyp_t(&ti_0);
            }
            FX_CHECK_EXN(_fx_catch_24);
         }
         fx_str_t slit_27 = FX_MAKE_STR("}");
         FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_27, 0), _fx_catch_24);
      }
      FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_catch_24);

   _fx_catch_24: ;
      if (relems_0) {
         _fx_free_LT2R9Ast__id_tN14K_form__ktyp_t(&relems_0);
      }
      FX_FREE_STR(&v_11);
      goto _fx_endmatch_2;
   }
   if (tag_1 == 21) {
      fx_str_t slit_28 = FX_MAKE_STR("exn");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_28, 0), _fx_catch_25);

   _fx_catch_25: ;
      goto _fx_endmatch_2;
   }
   if (tag_1 == 22) {
      fx_str_t slit_29 = FX_MAKE_STR("<err>");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_29, 0), _fx_catch_26);

   _fx_catch_26: ;
      goto _fx_endmatch_2;
   }
   if (tag_1 == 11) {
      fx_str_t slit_30 = FX_MAKE_STR("cptr");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_30, 0), _fx_catch_27);

   _fx_catch_27: ;
      goto _fx_endmatch_2;
   }
   if (tag_1 == 12) {
      fx_str_t slit_31 = FX_MAKE_STR("*");
      FX_CALL(
         _fx_M4K_ppFM9ppktypsufv6N14K_form__ktyp_tSR10Ast__loc_tiR5PP__ti(t_0->u.KTypRawPointer, &slit_31, loc_0, p1_0, pp_0,
            prec_0, 0), _fx_catch_28);

   _fx_catch_28: ;
      goto _fx_endmatch_2;
   }
   if (tag_1 == 23) {
      fx_str_t slit_32 = FX_MAKE_STR("module");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_32, 0), _fx_catch_29);

   _fx_catch_29: ;
      goto _fx_endmatch_2;
   }
   FX_FAST_THROW(FX_EXN_NoMatchError, _fx_cleanup);

_fx_endmatch_2: ;

_fx_cleanup: ;
   return fx_status;
}

static int _fx_M4K_ppFM7ppktyp_v4N14K_form__ktyp_tiR10Ast__loc_tR5PP__t(
   struct _fx_N14K_form__ktyp_t_data_t* t_0,
   int_ prec_0,
   struct _fx_R10Ast__loc_t* loc_0,
   struct _fx_R5PP__t* pp_0,
   void* fx_fv)
{
   int fx_status = 0;
   FX_CALL(fx_check_stack(), _fx_cleanup);
   FX_CALL(_fx_M4K_ppFM8pp_ktyp_v5R5PP__tN14K_form__ktyp_tiR10Ast__loc_tB(pp_0, t_0, prec_0, loc_0, false, 0), _fx_cleanup);

_fx_cleanup: ;
   return fx_status;
}

static int _fx_M4K_ppFM9ppktypsufv6N14K_form__ktyp_tSR10Ast__loc_tiR5PP__ti(
   struct _fx_N14K_form__ktyp_t_data_t* t1_0,
   fx_str_t* suf_0,
   struct _fx_R10Ast__loc_t* loc_0,
   int_ p1_0,
   struct _fx_R5PP__t* pp_0,
   int_ prec_0,
   void* fx_fv)
{
   _fx_Ta2S v_0 = {0};
   fx_str_t lp_0 = {0};
   fx_str_t rp_0 = {0};
   int fx_status = 0;
   FX_CALL(fx_check_stack(), _fx_cleanup);
   if (prec_0 < p1_0) {
      fx_str_t slit_0 = FX_MAKE_STR("("); fx_str_t slit_1 = FX_MAKE_STR(")"); _fx_make_Ta2S(&slit_0, &slit_1, &v_0);
   }
   else {
      fx_str_t slit_2 = FX_MAKE_STR(""); fx_str_t slit_3 = FX_MAKE_STR(""); _fx_make_Ta2S(&slit_2, &slit_3, &v_0);
   }
   fx_copy_str(&v_0.t0, &lp_0);
   fx_copy_str(&v_0.t1, &rp_0);
   FX_CALL(_fx_M2PPFM5beginv1RM1t(pp_0, 0), _fx_cleanup);
   FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &lp_0, 0), _fx_cleanup);
   FX_CALL(_fx_M4K_ppFM7ppktyp_v4N14K_form__ktyp_tiR10Ast__loc_tR5PP__t(t1_0, prec_0, loc_0, pp_0, 0), _fx_cleanup);
   FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &rp_0, 0), _fx_cleanup);
   fx_str_t slit_4 = FX_MAKE_STR(" ");
   FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_4, 0), _fx_cleanup);
   FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, suf_0, 0), _fx_cleanup);
   FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_cleanup);

_fx_cleanup: ;
   _fx_free_Ta2S(&v_0);
   FX_FREE_STR(&lp_0);
   FX_FREE_STR(&rp_0);
   return fx_status;
}

static int _fx_M4K_ppFM11ppktyplist_v4SLN14K_form__ktyp_tR10Ast__loc_tR5PP__t(
   fx_str_t* prefix_0,
   struct _fx_LN14K_form__ktyp_t_data_t* args_0,
   struct _fx_R10Ast__loc_t* loc_0,
   struct _fx_R5PP__t* pp_0,
   void* fx_fv)
{
   int fx_status = 0;
   FX_CALL(fx_check_stack(), _fx_cleanup);
   FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, prefix_0, 0), _fx_cleanup);
   FX_CALL(_fx_M2PPFM3cutv1RM1t(pp_0, 0), _fx_cleanup);
   FX_CALL(_fx_M2PPFM5beginv1RM1t(pp_0, 0), _fx_cleanup);
   int_ i_0 = 0;
   _fx_LN14K_form__ktyp_t lst_0 = args_0;
   for (; lst_0; lst_0 = lst_0->tl, i_0 += 1) {
      _fx_N14K_form__ktyp_t t_0 = lst_0->hd;
      if (i_0 != 0) {
         fx_str_t slit_0 = FX_MAKE_STR(",");
         FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_0, 0), _fx_catch_0);
         FX_CALL(_fx_M2PPFM5spacev1RM1t(pp_0, 0), _fx_catch_0);
      }
      FX_CALL(_fx_M4K_ppFM7ppktyp_v4N14K_form__ktyp_tiR10Ast__loc_tR5PP__t(t_0, 0, loc_0, pp_0, 0), _fx_catch_0);

   _fx_catch_0: ;
      FX_CHECK_EXN(_fx_cleanup);
   }
   FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_cleanup);
   FX_CALL(_fx_M2PPFM3cutv1RM1t(pp_0, 0), _fx_cleanup);
   fx_str_t slit_1 = FX_MAKE_STR(")");
   FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_1, 0), _fx_cleanup);

_fx_cleanup: ;
   return fx_status;
}

FX_EXTERN_C int _fx_M4K_ppFM7pp_dom_v3R5PP__tN13K_form__dom_tR10Ast__loc_t(
   struct _fx_R5PP__t* pp_0,
   struct _fx_N13K_form__dom_t* r_0,
   struct _fx_R10Ast__loc_t* loc_0,
   void* fx_fv)
{
   int fx_status = 0;
   int tag_0 = r_0->tag;
   if (tag_0 == 1) {
      _fx_N14K_form__atom_t* a_0 = &r_0->u.DomainElem;
      int tag_1 = a_0->tag;
      if (tag_1 == 1) {
         fx_str_t v_0 = {0};
         FX_CALL(_fx_M6K_formFM7idk2strS2R9Ast__id_tR10Ast__loc_t(&a_0->u.AtomId, loc_0, &v_0, 0), _fx_catch_0);
         FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &v_0, 0), _fx_catch_0);

      _fx_catch_0: ;
         FX_FREE_STR(&v_0);
      }
      else if (tag_1 == 2) {
         fx_str_t v_1 = {0};
         FX_CALL(_fx_M6K_formFM8klit2strS3N14K_form__klit_tBR10Ast__loc_t(&a_0->u.AtomLit, false, loc_0, &v_1, 0), _fx_catch_1);
         FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &v_1, 0), _fx_catch_1);

      _fx_catch_1: ;
         FX_FREE_STR(&v_1);
      }
      else {
         FX_FAST_THROW(FX_EXN_NoMatchError, _fx_catch_2);
      }
      FX_CHECK_EXN(_fx_catch_2);

   _fx_catch_2: ;
   }
   else if (tag_0 == 2) {
      _fx_N14K_form__atom_t* a_1 = &r_0->u.DomainFast;
      fx_str_t slit_0 = FX_MAKE_STR("<");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_0, 0), _fx_catch_5);
      int tag_2 = a_1->tag;
      if (tag_2 == 1) {
         fx_str_t v_2 = {0};
         FX_CALL(_fx_M6K_formFM7idk2strS2R9Ast__id_tR10Ast__loc_t(&a_1->u.AtomId, loc_0, &v_2, 0), _fx_catch_3);
         FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &v_2, 0), _fx_catch_3);

      _fx_catch_3: ;
         FX_FREE_STR(&v_2);
      }
      else if (tag_2 == 2) {
         fx_str_t v_3 = {0};
         FX_CALL(_fx_M6K_formFM8klit2strS3N14K_form__klit_tBR10Ast__loc_t(&a_1->u.AtomLit, false, loc_0, &v_3, 0), _fx_catch_4);
         FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &v_3, 0), _fx_catch_4);

      _fx_catch_4: ;
         FX_FREE_STR(&v_3);
      }
      else {
         FX_FAST_THROW(FX_EXN_NoMatchError, _fx_catch_5);
      }
      FX_CHECK_EXN(_fx_catch_5);
      fx_str_t slit_1 = FX_MAKE_STR(">");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_1, 0), _fx_catch_5);

   _fx_catch_5: ;
   }
   else if (tag_0 == 3) {
      _fx_Ta3N14K_form__atom_t* vcase_0 = &r_0->u.DomainRange;
      _fx_N14K_form__atom_t* k_0 = &vcase_0->t2;
      _fx_N14K_form__atom_t* j_0 = &vcase_0->t1;
      _fx_N14K_form__atom_t* i_0 = &vcase_0->t0;
      if (i_0->tag == 2) {
         if (i_0->u.AtomLit.tag == 8) {
            goto _fx_endmatch_0;
         }
      }
      int tag_3 = i_0->tag;
      if (tag_3 == 1) {
         fx_str_t v_4 = {0};
         FX_CALL(_fx_M6K_formFM7idk2strS2R9Ast__id_tR10Ast__loc_t(&i_0->u.AtomId, loc_0, &v_4, 0), _fx_catch_6);
         FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &v_4, 0), _fx_catch_6);

      _fx_catch_6: ;
         FX_FREE_STR(&v_4);
      }
      else if (tag_3 == 2) {
         fx_str_t v_5 = {0};
         FX_CALL(_fx_M6K_formFM8klit2strS3N14K_form__klit_tBR10Ast__loc_t(&i_0->u.AtomLit, false, loc_0, &v_5, 0), _fx_catch_7);
         FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &v_5, 0), _fx_catch_7);

      _fx_catch_7: ;
         FX_FREE_STR(&v_5);
      }
      else {
         FX_FAST_THROW(FX_EXN_NoMatchError, _fx_catch_8);
      }
      FX_CHECK_EXN(_fx_catch_8);

   _fx_catch_8: ;

   _fx_endmatch_0: ;
      FX_CHECK_EXN(_fx_catch_15);
      fx_str_t slit_2 = FX_MAKE_STR(":");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_2, 0), _fx_catch_15);
      if (j_0->tag == 2) {
         if (j_0->u.AtomLit.tag == 8) {
            goto _fx_endmatch_1;
         }
      }
      int tag_4 = j_0->tag;
      if (tag_4 == 1) {
         fx_str_t v_6 = {0};
         FX_CALL(_fx_M6K_formFM7idk2strS2R9Ast__id_tR10Ast__loc_t(&j_0->u.AtomId, loc_0, &v_6, 0), _fx_catch_9);
         FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &v_6, 0), _fx_catch_9);

      _fx_catch_9: ;
         FX_FREE_STR(&v_6);
      }
      else if (tag_4 == 2) {
         fx_str_t v_7 = {0};
         FX_CALL(_fx_M6K_formFM8klit2strS3N14K_form__klit_tBR10Ast__loc_t(&j_0->u.AtomLit, false, loc_0, &v_7, 0),
            _fx_catch_10);
         FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &v_7, 0), _fx_catch_10);

      _fx_catch_10: ;
         FX_FREE_STR(&v_7);
      }
      else {
         FX_FAST_THROW(FX_EXN_NoMatchError, _fx_catch_11);
      }
      FX_CHECK_EXN(_fx_catch_11);

   _fx_catch_11: ;

   _fx_endmatch_1: ;
      FX_CHECK_EXN(_fx_catch_15);
      int tag_5 = k_0->tag;
      if (tag_5 == 2) {
         if (k_0->u.AtomLit.tag == 8) {
            goto _fx_endmatch_2;
         }
      }
      if (tag_5 == 2) {
         _fx_N14K_form__klit_t* v_8 = &k_0->u.AtomLit;
         if (v_8->tag == 1) {
            if (v_8->u.KLitInt == 1LL) {
               goto _fx_endmatch_2;
            }
         }
      }
      fx_str_t slit_3 = FX_MAKE_STR(":");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_3, 0), _fx_catch_14);
      int tag_6 = k_0->tag;
      if (tag_6 == 1) {
         fx_str_t v_9 = {0};
         FX_CALL(_fx_M6K_formFM7idk2strS2R9Ast__id_tR10Ast__loc_t(&k_0->u.AtomId, loc_0, &v_9, 0), _fx_catch_12);
         FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &v_9, 0), _fx_catch_12);

      _fx_catch_12: ;
         FX_FREE_STR(&v_9);
      }
      else if (tag_6 == 2) {
         fx_str_t v_10 = {0};
         FX_CALL(_fx_M6K_formFM8klit2strS3N14K_form__klit_tBR10Ast__loc_t(&k_0->u.AtomLit, false, loc_0, &v_10, 0),
            _fx_catch_13);
         FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &v_10, 0), _fx_catch_13);

      _fx_catch_13: ;
         FX_FREE_STR(&v_10);
      }
      else {
         FX_FAST_THROW(FX_EXN_NoMatchError, _fx_catch_14);
      }
      FX_CHECK_EXN(_fx_catch_14);

   _fx_catch_14: ;

   _fx_endmatch_2: ;
      FX_CHECK_EXN(_fx_catch_15);

   _fx_catch_15: ;
   }
   else {
      FX_FAST_THROW(FX_EXN_NoMatchError, _fx_cleanup);
   }

_fx_cleanup: ;
   return fx_status;
}

FX_EXTERN_C int _fx_M4K_ppFM7pp_exp_v2R5PP__tN14K_form__kexp_t(
   struct _fx_R5PP__t* pp_0,
   struct _fx_N14K_form__kexp_t_data_t* e_0,
   void* fx_fv)
{
   int fx_status = 0;
   FX_CALL(fx_check_stack(), _fx_cleanup);
   _fx_R10Ast__loc_t eloc_0;
   FX_CALL(_fx_M6K_formFM12get_kexp_locR10Ast__loc_t1N14K_form__kexp_t(e_0, &eloc_0, 0), _fx_cleanup);
   int tag_0 = FX_REC_VARIANT_TAG(e_0);
   if (tag_0 == 31) {
      _fx_R17K_form__kdefval_t v_0 = {0};
      _fx_R16Ast__val_flags_t kv_flags_0 = {0};
      _fx_N14K_form__ktyp_t kv_typ_0 = 0;
      _fx_T3R9Ast__id_tN14K_form__kexp_tR10Ast__loc_t* vcase_0 = &e_0->u.KDefVal;
      _fx_R9Ast__id_t* n_0 = &vcase_0->t0;
      FX_CALL(_fx_M2PPFM6beginvv1RM1t(pp_0, 0), _fx_catch_0);
      FX_CALL(_fx_M2PPFM5beginv1RM1t(pp_0, 0), _fx_catch_0);
      FX_CALL(_fx_M6K_formFM8get_kvalRM9kdefval_t2R9Ast__id_tR10Ast__loc_t(n_0, &vcase_0->t2, &v_0, 0), _fx_catch_0);
      _fx_copy_R16Ast__val_flags_t(&v_0.kv_flags, &kv_flags_0);
      FX_COPY_PTR(v_0.kv_typ, &kv_typ_0);
      FX_CALL(_fx_M6Ast_ppFM16pprint_val_flagsv2R5PP__tR16Ast__val_flags_t(pp_0, &kv_flags_0, 0), _fx_catch_0);
      if (kv_flags_0.val_flag_mutable) {
         fx_str_t slit_0 = FX_MAKE_STR("var "); FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_0, 0), _fx_catch_0);
      }
      else {
         fx_str_t slit_1 = FX_MAKE_STR("val "); FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_1, 0), _fx_catch_0);
      }
      FX_CALL(_fx_M4K_ppFM9pp_idtyp_v5R9Ast__id_tN14K_form__ktyp_tBR10Ast__loc_tR5PP__t(n_0, kv_typ_0, false, &eloc_0, pp_0, 0),
         _fx_catch_0);
      fx_str_t slit_2 = FX_MAKE_STR(" =");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_2, 0), _fx_catch_0);
      FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_catch_0);
      FX_CALL(_fx_M2PPFM5spacev1RM1t(pp_0, 0), _fx_catch_0);
      FX_CALL(_fx_M4K_ppFM7pp_exp_v2N14K_form__kexp_tR5PP__t(vcase_0->t1, pp_0, 0), _fx_catch_0);
      FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_catch_0);

   _fx_catch_0: ;
      if (kv_typ_0) {
         _fx_free_N14K_form__ktyp_t(&kv_typ_0);
      }
      _fx_free_R16Ast__val_flags_t(&kv_flags_0);
      _fx_free_R17K_form__kdefval_t(&v_0);
      goto _fx_endmatch_1;
   }
   if (tag_0 == 32) {
      _fx_R17K_form__kdeffun_t v_1 = {0};
      _fx_LR9Ast__id_t kf_params_0 = 0;
      _fx_N14K_form__ktyp_t v_2 = 0;
      _fx_copy_R17K_form__kdeffun_t(&e_0->u.KDefFun->data, &v_1);
      _fx_R16Ast__fun_flags_t* kf_flags_0 = &v_1.kf_flags;
      _fx_R25K_form__kdefclosureinfo_t* kf_closure_0 = &v_1.kf_closure;
      _fx_LR9Ast__id_t kf_params_1 = v_1.kf_params;
      _fx_R9Ast__id_t kci_fcv_t_0 = kf_closure_0->kci_fcv_t;
      _fx_R9Ast__id_t kci_arg_0 = kf_closure_0->kci_arg;
      int_ nargs_0;
      FX_CALL(_fx_M4K_ppFM8length1_i1LR9Ast__id_t(kf_params_1, &nargs_0, 0), _fx_catch_4);
      _fx_N17Ast__fun_constr_t ctor_id_0 = kf_flags_0->fun_flag_ctor;
      FX_CALL(_fx_M2PPFM6beginvv2RM1ti(pp_0, 0, 0), _fx_catch_4);
      FX_CALL(_fx_M2PPFM5beginv1RM1t(pp_0, 0), _fx_catch_4);
      FX_CALL(_fx_M6Ast_ppFM16pprint_fun_flagsv2R5PP__tR16Ast__fun_flags_t(pp_0, kf_flags_0, 0), _fx_catch_4);
      fx_str_t slit_3 = FX_MAKE_STR("fun ");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_3, 0), _fx_catch_4);
      FX_CALL(_fx_M4K_ppFM6pp_id_v3R9Ast__id_tR10Ast__loc_tR5PP__t(&v_1.kf_name, &eloc_0, pp_0, 0), _fx_catch_4);
      fx_str_t slit_4 = FX_MAKE_STR("(");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_4, 0), _fx_catch_4);
      FX_CALL(_fx_M2PPFM3cutv1RM1t(pp_0, 0), _fx_catch_4);
      FX_CALL(_fx_M2PPFM5beginv1RM1t(pp_0, 0), _fx_catch_4);
      int_ i_0 = 0;
      FX_COPY_PTR(kf_params_1, &kf_params_0);
      _fx_LR9Ast__id_t lst_0 = kf_params_0;
      for (; lst_0; lst_0 = lst_0->tl, i_0 += 1) {
         _fx_R17K_form__kdefval_t v_3 = {0};
         _fx_N14K_form__ktyp_t t_0 = 0;
         _fx_R9Ast__id_t* n_1 = &lst_0->hd;
         if (i_0 > 0) {
            fx_str_t slit_5 = FX_MAKE_STR(",");
            FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_5, 0), _fx_catch_1);
            FX_CALL(_fx_M2PPFM5spacev1RM1t(pp_0, 0), _fx_catch_1);
         }
         FX_CALL(_fx_M6K_formFM8get_kvalRM9kdefval_t2R9Ast__id_tR10Ast__loc_t(n_1, &v_1.kf_loc, &v_3, 0), _fx_catch_1);
         FX_COPY_PTR(v_3.kv_typ, &t_0);
         FX_CALL(_fx_M4K_ppFM9pp_idtyp_v5R9Ast__id_tN14K_form__ktyp_tBR10Ast__loc_tR5PP__t(n_1, t_0, false, &eloc_0, pp_0, 0),
            _fx_catch_1);

      _fx_catch_1: ;
         if (t_0) {
            _fx_free_N14K_form__ktyp_t(&t_0);
         }
         _fx_free_R17K_form__kdefval_t(&v_3);
         FX_CHECK_EXN(_fx_catch_4);
      }
      bool res_0;
      FX_CALL(_fx_M4K_ppFM6__ne__B2R9Ast__id_tR9Ast__id_t(&kci_arg_0, &_fx_g9Ast__noid, &res_0, 0), _fx_catch_4);
      if (res_0) {
         if (nargs_0 > 0) {
            fx_str_t slit_6 = FX_MAKE_STR(";");
            FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_6, 0), _fx_catch_4);
            FX_CALL(_fx_M2PPFM5spacev1RM1t(pp_0, 0), _fx_catch_4);
         }
         FX_CALL(_fx_M6K_formFM8KTypNameN14K_form__ktyp_t1R9Ast__id_t(&kci_fcv_t_0, &v_2), _fx_catch_4);
         FX_CALL(
            _fx_M4K_ppFM9pp_idtyp_v5R9Ast__id_tN14K_form__ktyp_tBR10Ast__loc_tR5PP__t(&kci_arg_0, v_2, false, &eloc_0, pp_0, 0),
            _fx_catch_4);
      }
      FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_catch_4);
      FX_CALL(_fx_M2PPFM3cutv1RM1t(pp_0, 0), _fx_catch_4);
      fx_str_t slit_7 = FX_MAKE_STR("):");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_7, 0), _fx_catch_4);
      FX_CALL(_fx_M2PPFM5spacev1RM1t(pp_0, 0), _fx_catch_4);
      FX_CALL(_fx_M4K_ppFM8pp_ktyp_v3N14K_form__ktyp_tR10Ast__loc_tR5PP__t(v_1.kf_rt, &eloc_0, pp_0, 0), _fx_catch_4);
      if (ctor_id_0.tag == 1) {
         FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_catch_2);
         FX_CALL(_fx_M2PPFM5spacev1RM1t(pp_0, 0), _fx_catch_2);
         FX_CALL(_fx_M4K_ppFM16pp_exp_as_block_v4N14K_form__kexp_tBBR5PP__t(v_1.kf_body, false, true, pp_0, 0), _fx_catch_2);

      _fx_catch_2: ;
      }
      else {
         fx_str_t v_4 = {0};
         fx_str_t slit_8 = FX_MAKE_STR(" =");
         FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_8, 0), _fx_catch_3);
         FX_CALL(_fx_M2PPFM5spacev1RM1t(pp_0, 0), _fx_catch_3);
         FX_CALL(_fx_M3AstFM8ctor2strS1N17Ast__fun_constr_t(&ctor_id_0, &v_4, 0), _fx_catch_3);
         FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &v_4, 0), _fx_catch_3);
         FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_catch_3);

      _fx_catch_3: ;
         FX_FREE_STR(&v_4);
      }
      FX_CHECK_EXN(_fx_catch_4);
      FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_catch_4);
      FX_CALL(_fx_M2PPFM7newlinev1RM1t(pp_0, 0), _fx_catch_4);

   _fx_catch_4: ;
      if (v_2) {
         _fx_free_N14K_form__ktyp_t(&v_2);
      }
      FX_FREE_LIST_SIMPLE(&kf_params_0);
      _fx_free_R17K_form__kdeffun_t(&v_1);
      goto _fx_endmatch_1;
   }
   if (tag_0 == 33) {
      _fx_R17K_form__kdefexn_t v_5 = {0};
      _fx_copy_R17K_form__kdefexn_t(&e_0->u.KDefExn->data, &v_5);
      fx_str_t slit_9 = FX_MAKE_STR("exception ");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_9, 0), _fx_catch_5);
      FX_CALL(
         _fx_M4K_ppFM9pp_idtyp_v5R9Ast__id_tN14K_form__ktyp_tBR10Ast__loc_tR5PP__t(&v_5.ke_name, v_5.ke_typ, true, &eloc_0,
            pp_0, 0), _fx_catch_5);

   _fx_catch_5: ;
      _fx_free_R17K_form__kdefexn_t(&v_5);
      goto _fx_endmatch_1;
   }
   if (tag_0 == 36) {
      _fx_R17K_form__kdeftyp_t v_6 = {0};
      _fx_copy_R17K_form__kdeftyp_t(&e_0->u.KDefTyp->data, &v_6);
      FX_CALL(_fx_M2PPFM5beginv1RM1t(pp_0, 0), _fx_catch_6);
      FX_CALL(_fx_M4K_ppFM5ppktpv2Nt6option1R17K_form__ktprops_tR5PP__t(&v_6.kt_props, pp_0, 0), _fx_catch_6);
      fx_str_t slit_10 = FX_MAKE_STR("type ");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_10, 0), _fx_catch_6);
      FX_CALL(_fx_M4K_ppFM6pp_id_v3R9Ast__id_tR10Ast__loc_tR5PP__t(&v_6.kt_name, &eloc_0, pp_0, 0), _fx_catch_6);
      fx_str_t slit_11 = FX_MAKE_STR(" =");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_11, 0), _fx_catch_6);
      FX_CALL(_fx_M2PPFM5spacev1RM1t(pp_0, 0), _fx_catch_6);
      FX_CALL(_fx_M4K_ppFM17pp_ktyp_detailed_v3N14K_form__ktyp_tR10Ast__loc_tR5PP__t(v_6.kt_typ, &eloc_0, pp_0, 0),
         _fx_catch_6);
      FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_catch_6);
      FX_CALL(_fx_M2PPFM7newlinev1RM1t(pp_0, 0), _fx_catch_6);

   _fx_catch_6: ;
      _fx_free_R17K_form__kdeftyp_t(&v_6);
      goto _fx_endmatch_1;
   }
   if (tag_0 == 34) {
      _fx_R21K_form__kdefvariant_t v_7 = {0};
      _fx_LT2R9Ast__id_tLR9Ast__id_t kvar_ifaces_0 = 0;
      _fx_LT2R9Ast__id_tN14K_form__ktyp_t kvar_cases_0 = 0;
      _fx_copy_R21K_form__kdefvariant_t(&e_0->u.KDefVariant->data, &v_7);
      _fx_R16Ast__var_flags_t* kvar_flags_0 = &v_7.kvar_flags;
      _fx_LT2R9Ast__id_tLR9Ast__id_t kvar_ifaces_1 = v_7.kvar_ifaces;
      _fx_LT2R9Ast__id_tN14K_form__ktyp_t kvar_cases_1 = v_7.kvar_cases;
      bool is_opt0_0 = kvar_flags_0->var_flag_opt;
      bool is_recursive_0 = kvar_flags_0->var_flag_recursive;
      FX_CALL(_fx_M2PPFM5beginv1RM1t(pp_0, 0), _fx_catch_10);
      FX_CALL(_fx_M4K_ppFM5ppktpv2Nt6option1R17K_form__ktprops_tR5PP__t(&v_7.kvar_props, pp_0, 0), _fx_catch_10);
      if (is_recursive_0) {
         fx_str_t slit_12 = FX_MAKE_STR("@@recursive "); FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_12, 0), _fx_catch_10);
      }
      if (is_opt0_0) {
         fx_str_t slit_13 = FX_MAKE_STR("@@option_like "); FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_13, 0), _fx_catch_10);
      }
      if (!kvar_flags_0->var_flag_have_tag) {
         fx_str_t slit_14 = FX_MAKE_STR("@@no_tag "); FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_14, 0), _fx_catch_10);
      }
      if (kvar_flags_0->var_flag_instance) {
         fx_str_t slit_15 = FX_MAKE_STR("@@instance "); FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_15, 0), _fx_catch_10);
      }
      fx_str_t slit_16 = FX_MAKE_STR("type");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_16, 0), _fx_catch_10);
      FX_CALL(_fx_M2PPFM5spacev1RM1t(pp_0, 0), _fx_catch_10);
      FX_CALL(_fx_M4K_ppFM6pp_id_v3R9Ast__id_tR10Ast__loc_tR5PP__t(&v_7.kvar_name, &eloc_0, pp_0, 0), _fx_catch_10);
      if (kvar_ifaces_1 != 0) {
         FX_CALL(_fx_M2PPFM5spacev1RM1t(pp_0, 0), _fx_catch_10);
         fx_str_t slit_17 = FX_MAKE_STR("implements");
         FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_17, 0), _fx_catch_10);
         FX_CALL(_fx_M2PPFM5spacev1RM1t(pp_0, 0), _fx_catch_10);
         FX_CALL(_fx_M2PPFM6beginvv2RM1ti(pp_0, 0, 0), _fx_catch_10);
         int_ i_1 = 0;
         FX_COPY_PTR(kvar_ifaces_1, &kvar_ifaces_0);
         _fx_LT2R9Ast__id_tLR9Ast__id_t lst_1 = kvar_ifaces_0;
         for (; lst_1; lst_1 = lst_1->tl, i_1 += 1) {
            _fx_LR9Ast__id_t impl_0 = 0;
            _fx_T2R9Ast__id_tLR9Ast__id_t* __pat___0 = &lst_1->hd;
            _fx_R9Ast__id_t iface_0 = __pat___0->t0;
            FX_COPY_PTR(__pat___0->t1, &impl_0);
            if (i_1 > 0) {
               fx_str_t slit_18 = FX_MAKE_STR(",");
               FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_18, 0), _fx_catch_8);
               FX_CALL(_fx_M2PPFM5spacev1RM1t(pp_0, 0), _fx_catch_8);
            }
            FX_CALL(_fx_M2PPFM5beginv1RM1t(pp_0, 0), _fx_catch_8);
            FX_CALL(_fx_M4K_ppFM6pp_id_v3R9Ast__id_tR10Ast__loc_tR5PP__t(&iface_0, &eloc_0, pp_0, 0), _fx_catch_8);
            fx_str_t slit_19 = FX_MAKE_STR(":{ ");
            FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_19, 0), _fx_catch_8);
            int_ j_0 = 0;
            _fx_LR9Ast__id_t lst_2 = impl_0;
            for (; lst_2; lst_2 = lst_2->tl, j_0 += 1) {
               _fx_R9Ast__id_t* f_0 = &lst_2->hd;
               if (j_0 > 0) {
                  fx_str_t slit_20 = FX_MAKE_STR(",");
                  FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_20, 0), _fx_catch_7);
                  FX_CALL(_fx_M2PPFM5spacev1RM1t(pp_0, 0), _fx_catch_7);
               }
               FX_CALL(_fx_M4K_ppFM6pp_id_v3R9Ast__id_tR10Ast__loc_tR5PP__t(f_0, &eloc_0, pp_0, 0), _fx_catch_7);

            _fx_catch_7: ;
               FX_CHECK_EXN(_fx_catch_8);
            }
            fx_str_t slit_21 = FX_MAKE_STR(" }");
            FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_21, 0), _fx_catch_8);
            FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_catch_8);

         _fx_catch_8: ;
            FX_FREE_LIST_SIMPLE(&impl_0);
            FX_CHECK_EXN(_fx_catch_10);
         }
         FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_catch_10);
      }
      fx_str_t slit_22 = FX_MAKE_STR(" =");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_22, 0), _fx_catch_10);
      FX_CALL(_fx_M2PPFM5spacev1RM1t(pp_0, 0), _fx_catch_10);
      int_ ncases_0;
      FX_CALL(_fx_M4K_ppFM8length1_i1LT2R9Ast__id_tN14K_form__ktyp_t(kvar_cases_1, &ncases_0, 0), _fx_catch_10);
      int_ i_2 = 0;
      FX_COPY_PTR(kvar_cases_1, &kvar_cases_0);
      _fx_LT2R9Ast__id_tN14K_form__ktyp_t lst_3 = kvar_cases_0;
      for (; lst_3; lst_3 = lst_3->tl, i_2 += 1) {
         _fx_N14K_form__ktyp_t t_1 = 0;
         _fx_T2R9Ast__id_tN14K_form__ktyp_t* __pat___1 = &lst_3->hd;
         _fx_R9Ast__id_t v_8 = __pat___1->t0;
         FX_COPY_PTR(__pat___1->t1, &t_1);
         fx_str_t slit_23 = FX_MAKE_STR("| ");
         FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_23, 0), _fx_catch_9);
         FX_CALL(_fx_M4K_ppFM9pp_idtyp_v5R9Ast__id_tN14K_form__ktyp_tBR10Ast__loc_tR5PP__t(&v_8, t_1, true, &eloc_0, pp_0, 0),
            _fx_catch_9);
         if (i_2 + 1 < ncases_0) {
            FX_CALL(_fx_M2PPFM5spacev1RM1t(pp_0, 0), _fx_catch_9);
         }

      _fx_catch_9: ;
         if (t_1) {
            _fx_free_N14K_form__ktyp_t(&t_1);
         }
         FX_CHECK_EXN(_fx_catch_10);
      }
      FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_catch_10);
      FX_CALL(_fx_M2PPFM7newlinev1RM1t(pp_0, 0), _fx_catch_10);

   _fx_catch_10: ;
      if (kvar_cases_0) {
         _fx_free_LT2R9Ast__id_tN14K_form__ktyp_t(&kvar_cases_0);
      }
      if (kvar_ifaces_0) {
         _fx_free_LT2R9Ast__id_tLR9Ast__id_t(&kvar_ifaces_0);
      }
      _fx_free_R21K_form__kdefvariant_t(&v_7);
      goto _fx_endmatch_1;
   }
   if (tag_0 == 35) {
      _fx_R23K_form__kdefinterface_t v_9 = {0};
      _fx_LT2R9Ast__id_tN14K_form__ktyp_t ki_all_methods_0 = 0;
      _fx_copy_R23K_form__kdefinterface_t(&e_0->u.KDefInterface->data, &v_9);
      _fx_LT2R9Ast__id_tN14K_form__ktyp_t ki_all_methods_1 = v_9.ki_all_methods;
      _fx_R9Ast__id_t* ki_base_0 = &v_9.ki_base;
      FX_CALL(_fx_M2PPFM6beginvv1RM1t(pp_0, 0), _fx_catch_12);
      fx_str_t slit_24 = FX_MAKE_STR("interface ");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_24, 0), _fx_catch_12);
      FX_CALL(_fx_M4K_ppFM6pp_id_v3R9Ast__id_tR10Ast__loc_tR5PP__t(&v_9.ki_name, &eloc_0, pp_0, 0), _fx_catch_12);
      bool res_1;
      FX_CALL(_fx_M4K_ppFM6__ne__B2R9Ast__id_tR9Ast__id_t(ki_base_0, &_fx_g9Ast__noid, &res_1, 0), _fx_catch_12);
      if (res_1) {
         fx_str_t slit_25 = FX_MAKE_STR(": ");
         FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_25, 0), _fx_catch_12);
         FX_CALL(_fx_M4K_ppFM6pp_id_v3R9Ast__id_tR10Ast__loc_tR5PP__t(ki_base_0, &eloc_0, pp_0, 0), _fx_catch_12);
      }
      int_ nmembers_0;
      FX_CALL(_fx_M4K_ppFM8length1_i1LT2R9Ast__id_tN14K_form__ktyp_t(ki_all_methods_1, &nmembers_0, 0), _fx_catch_12);
      fx_str_t slit_26 = FX_MAKE_STR(" {");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_26, 0), _fx_catch_12);
      FX_CALL(_fx_M2PPFM7newlinev1RM1t(pp_0, 0), _fx_catch_12);
      int_ i_3 = 0;
      FX_COPY_PTR(ki_all_methods_1, &ki_all_methods_0);
      _fx_LT2R9Ast__id_tN14K_form__ktyp_t lst_4 = ki_all_methods_0;
      for (; lst_4; lst_4 = lst_4->tl, i_3 += 1) {
         _fx_N14K_form__ktyp_t t_2 = 0;
         _fx_T2R9Ast__id_tN14K_form__ktyp_t* __pat___2 = &lst_4->hd;
         _fx_R9Ast__id_t f_1 = __pat___2->t0;
         FX_COPY_PTR(__pat___2->t1, &t_2);
         FX_CALL(_fx_M4K_ppFM9pp_idtyp_v5R9Ast__id_tN14K_form__ktyp_tBR10Ast__loc_tR5PP__t(&f_1, t_2, false, &eloc_0, pp_0, 0),
            _fx_catch_11);
         fx_str_t slit_27 = FX_MAKE_STR(";");
         FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_27, 0), _fx_catch_11);
         if (i_3 < nmembers_0 - 1) {
            FX_CALL(_fx_M2PPFM5spacev1RM1t(pp_0, 0), _fx_catch_11);
         }

      _fx_catch_11: ;
         if (t_2) {
            _fx_free_N14K_form__ktyp_t(&t_2);
         }
         FX_CHECK_EXN(_fx_catch_12);
      }
      FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_catch_12);
      FX_CALL(_fx_M2PPFM5spacev1RM1t(pp_0, 0), _fx_catch_12);
      fx_str_t slit_28 = FX_MAKE_STR("}");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_28, 0), _fx_catch_12);
      FX_CALL(_fx_M2PPFM7newlinev1RM1t(pp_0, 0), _fx_catch_12);

   _fx_catch_12: ;
      if (ki_all_methods_0) {
         _fx_free_LT2R9Ast__id_tN14K_form__ktyp_t(&ki_all_methods_0);
      }
      _fx_free_R23K_form__kdefinterface_t(&v_9);
      goto _fx_endmatch_1;
   }
   if (tag_0 == 37) {
      _fx_R25K_form__kdefclosurevars_t v_10 = {0};
      _fx_LT2R9Ast__id_tN14K_form__ktyp_t kcv_freevars_0 = 0;
      _fx_copy_R25K_form__kdefclosurevars_t(&e_0->u.KDefClosureVars->data, &v_10);
      _fx_LT2R9Ast__id_tN14K_form__ktyp_t kcv_freevars_1 = v_10.kcv_freevars;
      FX_CALL(_fx_M2PPFM6beginvv1RM1t(pp_0, 0), _fx_catch_14);
      FX_CALL(_fx_M2PPFM5beginv1RM1t(pp_0, 0), _fx_catch_14);
      fx_str_t slit_29 = FX_MAKE_STR("closure_data ");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_29, 0), _fx_catch_14);
      FX_CALL(_fx_M4K_ppFM6pp_id_v3R9Ast__id_tR10Ast__loc_tR5PP__t(&v_10.kcv_name, &eloc_0, pp_0, 0), _fx_catch_14);
      fx_str_t slit_30 = FX_MAKE_STR(" = {");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_30, 0), _fx_catch_14);
      FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_catch_14);
      FX_CALL(_fx_M2PPFM7newlinev1RM1t(pp_0, 0), _fx_catch_14);
      int_ nfv_0;
      FX_CALL(_fx_M4K_ppFM8length1_i1LT2R9Ast__id_tN14K_form__ktyp_t(kcv_freevars_1, &nfv_0, 0), _fx_catch_14);
      int_ i_4 = 0;
      FX_COPY_PTR(kcv_freevars_1, &kcv_freevars_0);
      _fx_LT2R9Ast__id_tN14K_form__ktyp_t lst_5 = kcv_freevars_0;
      for (; lst_5; lst_5 = lst_5->tl, i_4 += 1) {
         _fx_N14K_form__ktyp_t t_3 = 0;
         _fx_T2R9Ast__id_tN14K_form__ktyp_t* __pat___3 = &lst_5->hd;
         _fx_R9Ast__id_t n_2 = __pat___3->t0;
         FX_COPY_PTR(__pat___3->t1, &t_3);
         FX_CALL(_fx_M4K_ppFM9pp_idtyp_v5R9Ast__id_tN14K_form__ktyp_tBR10Ast__loc_tR5PP__t(&n_2, t_3, false, &eloc_0, pp_0, 0),
            _fx_catch_13);
         fx_str_t slit_31 = FX_MAKE_STR(";");
         FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_31, 0), _fx_catch_13);
         if (i_4 + 1 < nfv_0) {
            FX_CALL(_fx_M2PPFM5spacev1RM1t(pp_0, 0), _fx_catch_13);
         }

      _fx_catch_13: ;
         if (t_3) {
            _fx_free_N14K_form__ktyp_t(&t_3);
         }
         FX_CHECK_EXN(_fx_catch_14);
      }
      FX_CALL(_fx_M2PPFM5spacev1RM1t(pp_0, 0), _fx_catch_14);
      fx_str_t slit_32 = FX_MAKE_STR("}");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_32, 0), _fx_catch_14);
      FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_catch_14);
      FX_CALL(_fx_M2PPFM7newlinev1RM1t(pp_0, 0), _fx_catch_14);

   _fx_catch_14: ;
      if (kcv_freevars_0) {
         _fx_free_LT2R9Ast__id_tN14K_form__ktyp_t(&kcv_freevars_0);
      }
      _fx_free_R25K_form__kdefclosurevars_t(&v_10);
      goto _fx_endmatch_1;
   }
   if (tag_0 == 30) {
      _fx_N14K_form__klit_t v_11 = {0};
      _fx_N14K_form__atom_t v_12 = {0};
      _fx_T2N14K_form__ktyp_tR10Ast__loc_t v_13 = {0};
      _fx_N14K_form__kexp_t v_14 = 0;
      _fx_T2ST2N14K_form__ktyp_tR10Ast__loc_t* vcase_1 = &e_0->u.KExpCCode;
      FX_CALL(_fx_M2PPFM5beginv1RM1t(pp_0, 0), _fx_catch_15);
      fx_str_t slit_33 = FX_MAKE_STR("@ccode ");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_33, 0), _fx_catch_15);
      _fx_M6K_formFM10KLitStringN14K_form__klit_t1S(&vcase_1->t0, &v_11);
      _fx_M6K_formFM7AtomLitN14K_form__atom_t1N14K_form__klit_t(&v_11, &v_12);
      _fx_make_T2N14K_form__ktyp_tR10Ast__loc_t(_fx_g16K_pp__KTypString, &vcase_1->t1.t1, &v_13);
      FX_CALL(_fx_M6K_formFM8KExpAtomN14K_form__kexp_t2N14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(&v_12, &v_13, &v_14),
         _fx_catch_15);
      FX_CALL(_fx_M4K_ppFM7pp_exp_v2N14K_form__kexp_tR5PP__t(v_14, pp_0, 0), _fx_catch_15);
      FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_catch_15);
      FX_CALL(_fx_M2PPFM7newlinev1RM1t(pp_0, 0), _fx_catch_15);

   _fx_catch_15: ;
      if (v_14) {
         _fx_free_N14K_form__kexp_t(&v_14);
      }
      _fx_free_T2N14K_form__ktyp_tR10Ast__loc_t(&v_13);
      _fx_free_N14K_form__atom_t(&v_12);
      _fx_free_N14K_form__klit_t(&v_11);
      goto _fx_endmatch_1;
   }
   if (tag_0 == 10) {
      FX_CALL(_fx_M2PPFM6beginvv2RM1ti(pp_0, 0, 0), _fx_catch_16);
      FX_CALL(_fx_M4K_ppFM16pp_exp_as_block_v4N14K_form__kexp_tBBR5PP__t(e_0, false, true, pp_0, 0), _fx_catch_16);
      FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_catch_16);

   _fx_catch_16: ;
      goto _fx_endmatch_1;
   }
   if (tag_0 == 9) {
      FX_CALL(_fx_M2PPFM5beginv1RM1t(pp_0, 0), _fx_catch_17);
      fx_str_t slit_34 = FX_MAKE_STR("@sync ");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_34, 0), _fx_catch_17);
      FX_CALL(_fx_M4K_ppFM7pp_exp_v2R5PP__tN14K_form__kexp_t(pp_0, e_0->u.KExpSync.t1, 0), _fx_catch_17);
      FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_catch_17);

   _fx_catch_17: ;
      goto _fx_endmatch_1;
   }
   if (tag_0 == 1) {
      fx_str_t slit_35 = FX_MAKE_STR("{}");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_35, 0), _fx_catch_18);

   _fx_catch_18: ;
      goto _fx_endmatch_1;
   }
   if (tag_0 == 2) {
      fx_str_t slit_36 = FX_MAKE_STR("break");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_36, 0), _fx_catch_19);

   _fx_catch_19: ;
      goto _fx_endmatch_1;
   }
   if (tag_0 == 3) {
      fx_str_t slit_37 = FX_MAKE_STR("continue");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_37, 0), _fx_catch_20);

   _fx_catch_20: ;
      goto _fx_endmatch_1;
   }
   if (tag_0 == 4) {
      _fx_Nt6option1N14K_form__atom_t* a_opt_0 = &e_0->u.KExpReturn.t0;
      if (a_opt_0->tag == 2) {
         fx_str_t slit_38 = FX_MAKE_STR("(return");
         FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_38, 0), _fx_catch_21);
         FX_CALL(_fx_M2PPFM5spacev1RM1t(pp_0, 0), _fx_catch_21);
         FX_CALL(_fx_M4K_ppFM8pp_atom_v3N14K_form__atom_tR10Ast__loc_tR5PP__t(&a_opt_0->u.Some, &eloc_0, pp_0, 0),
            _fx_catch_21);
         fx_str_t slit_39 = FX_MAKE_STR(")");
         FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_39, 0), _fx_catch_21);

      _fx_catch_21: ;
      }
      else {
         fx_str_t slit_40 = FX_MAKE_STR("return");
         FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_40, 0), _fx_catch_22);

      _fx_catch_22: ;
      }
      FX_CHECK_EXN(_fx_catch_23);

   _fx_catch_23: ;
      goto _fx_endmatch_1;
   }
   if (tag_0 == 5) {
      FX_CALL(_fx_M4K_ppFM8pp_atom_v3N14K_form__atom_tR10Ast__loc_tR5PP__t(&e_0->u.KExpAtom.t0, &eloc_0, pp_0, 0),
         _fx_catch_24);

   _fx_catch_24: ;
      goto _fx_endmatch_1;
   }
   if (tag_0 == 6) {
      fx_str_t v_15 = {0};
      fx_str_t ostr_0 = {0};
      _fx_T4N13Ast__binary_tN14K_form__atom_tN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* vcase_2 = &e_0->u.KExpBinary;
      FX_CALL(_fx_M2PPFM5beginv1RM1t(pp_0, 0), _fx_catch_25);
      FX_CALL(_fx_M3AstFM6stringS1N13Ast__binary_t(vcase_2->t0, &v_15, 0), _fx_catch_25);
      fx_str_t slit_41 = FX_MAKE_STR(" ");
      {
         const fx_str_t strs_0[] = { slit_41, v_15 };
         FX_CALL(fx_strjoin(0, 0, 0, strs_0, 2, &ostr_0), _fx_catch_25);
      }
      FX_CALL(_fx_M4K_ppFM8pp_atom_v3N14K_form__atom_tR10Ast__loc_tR5PP__t(&vcase_2->t1, &eloc_0, pp_0, 0), _fx_catch_25);
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &ostr_0, 0), _fx_catch_25);
      FX_CALL(_fx_M2PPFM5spacev1RM1t(pp_0, 0), _fx_catch_25);
      FX_CALL(_fx_M4K_ppFM8pp_atom_v3N14K_form__atom_tR10Ast__loc_tR5PP__t(&vcase_2->t2, &eloc_0, pp_0, 0), _fx_catch_25);
      FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_catch_25);

   _fx_catch_25: ;
      FX_FREE_STR(&ostr_0);
      FX_FREE_STR(&v_15);
      goto _fx_endmatch_1;
   }
   if (tag_0 == 21) {
      _fx_T3R9Ast__id_tN14K_form__atom_tR10Ast__loc_t* vcase_3 = &e_0->u.KExpAssign;
      FX_CALL(_fx_M2PPFM5beginv1RM1t(pp_0, 0), _fx_catch_26);
      FX_CALL(_fx_M4K_ppFM6pp_id_v3R9Ast__id_tR10Ast__loc_tR5PP__t(&vcase_3->t0, &eloc_0, pp_0, 0), _fx_catch_26);
      fx_str_t slit_42 = FX_MAKE_STR(" =");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_42, 0), _fx_catch_26);
      FX_CALL(_fx_M2PPFM5spacev1RM1t(pp_0, 0), _fx_catch_26);
      FX_CALL(_fx_M4K_ppFM8pp_atom_v3N14K_form__atom_tR10Ast__loc_tR5PP__t(&vcase_3->t1, &eloc_0, pp_0, 0), _fx_catch_26);
      FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_catch_26);

   _fx_catch_26: ;
      goto _fx_endmatch_1;
   }
   if (tag_0 == 20) {
      _fx_N14K_form__ktyp_t v_16 = 0;
      _fx_T3R9Ast__id_tiT2N14K_form__ktyp_tR10Ast__loc_t* vcase_4 = &e_0->u.KExpMem;
      int_ i_5 = vcase_4->t1;
      _fx_R9Ast__id_t* n_3 = &vcase_4->t0;
      FX_CALL(_fx_M2PPFM5beginv1RM1t(pp_0, 0), _fx_catch_29);
      FX_CALL(_fx_M4K_ppFM6pp_id_v3R9Ast__id_tR10Ast__loc_tR5PP__t(n_3, &eloc_0, pp_0, 0), _fx_catch_29);
      fx_str_t slit_43 = FX_MAKE_STR(".");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_43, 0), _fx_catch_29);
      FX_CALL(_fx_M6K_formFM12get_idk_ktypN14K_form__ktyp_t2R9Ast__id_tR10Ast__loc_t(n_3, &vcase_4->t2.t1, &v_16, 0),
         _fx_catch_29);
      if (FX_REC_VARIANT_TAG(v_16) == 15) {
         _fx_T2R9Ast__id_tN14K_form__ktyp_t v_17 = {0};
         fx_str_t v_18 = {0};
         FX_CALL(
            _fx_M4K_ppFM3nthT2R9Ast__id_tN14K_form__ktyp_t2LT2R9Ast__id_tN14K_form__ktyp_ti(v_16->u.KTypRecord.t1, i_5, &v_17,
               0), _fx_catch_27);
         _fx_R9Ast__id_t ni_0 = v_17.t0;
         FX_CALL(_fx_M3AstFM2ppS1RM4id_t(&ni_0, &v_18, 0), _fx_catch_27);
         FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &v_18, 0), _fx_catch_27);

      _fx_catch_27: ;
         FX_FREE_STR(&v_18);
         _fx_free_T2R9Ast__id_tN14K_form__ktyp_t(&v_17);
      }
      else {
         fx_str_t v_19 = {0};
         FX_CALL(_fx_F6stringS1i(i_5, &v_19, 0), _fx_catch_28);
         FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &v_19, 0), _fx_catch_28);

      _fx_catch_28: ;
         FX_FREE_STR(&v_19);
      }
      FX_CHECK_EXN(_fx_catch_29);
      FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_catch_29);

   _fx_catch_29: ;
      if (v_16) {
         _fx_free_N14K_form__ktyp_t(&v_16);
      }
      goto _fx_endmatch_1;
   }
   if (tag_0 == 7) {
      _fx_T3N12Ast__unary_tN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* vcase_5 = &e_0->u.KExpUnary;
      if (vcase_5->t0.tag == 7) {
         _fx_N14K_form__atom_t* v_20 = &vcase_5->t1;
         if (v_20->tag == 1) {
            FX_CALL(_fx_M2PPFM5beginv1RM1t(pp_0, 0), _fx_catch_30);
            fx_str_t slit_44 = FX_MAKE_STR("*");
            FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_44, 0), _fx_catch_30);
            FX_CALL(_fx_M4K_ppFM6pp_id_v3R9Ast__id_tR10Ast__loc_tR5PP__t(&v_20->u.AtomId, &eloc_0, pp_0, 0), _fx_catch_30);
            FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_catch_30);

         _fx_catch_30: ;
            goto _fx_endmatch_1;
         }
      }
   }
   if (tag_0 == 7) {
      _fx_T3N12Ast__unary_tN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* vcase_6 = &e_0->u.KExpUnary;
      if (vcase_6->t0.tag == 6) {
         FX_CALL(_fx_M2PPFM5beginv1RM1t(pp_0, 0), _fx_catch_31);
         fx_str_t slit_45 = FX_MAKE_STR("ref ");
         FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_45, 0), _fx_catch_31);
         FX_CALL(_fx_M4K_ppFM8pp_atom_v3N14K_form__atom_tR10Ast__loc_tR5PP__t(&vcase_6->t1, &eloc_0, pp_0, 0), _fx_catch_31);
         FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_catch_31);

      _fx_catch_31: ;
         goto _fx_endmatch_1;
      }
   }
   if (tag_0 == 7) {
      fx_str_t ostr_1 = {0};
      _fx_T3N12Ast__unary_tN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* vcase_7 = &e_0->u.KExpUnary;
      FX_CALL(_fx_M2PPFM5beginv1RM1t(pp_0, 0), _fx_catch_32);
      FX_CALL(_fx_M3AstFM6stringS1N12Ast__unary_t(&vcase_7->t0, &ostr_1, 0), _fx_catch_32);
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &ostr_1, 0), _fx_catch_32);
      FX_CALL(_fx_M4K_ppFM8pp_atom_v3N14K_form__atom_tR10Ast__loc_tR5PP__t(&vcase_7->t1, &eloc_0, pp_0, 0), _fx_catch_32);
      FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_catch_32);

   _fx_catch_32: ;
      FX_FREE_STR(&ostr_1);
      goto _fx_endmatch_1;
   }
   if (tag_0 == 8) {
      fx_str_t v_21 = {0};
      _fx_LN14K_form__atom_t args_0 = 0;
      _fx_T3N13Ast__intrin_tLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* vcase_8 = &e_0->u.KExpIntrin;
      FX_CALL(_fx_M2PPFM5beginv1RM1t(pp_0, 0), _fx_catch_34);
      FX_CALL(_fx_M3AstFM6stringS1N13Ast__intrin_t(&vcase_8->t0, &v_21, 0), _fx_catch_34);
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &v_21, 0), _fx_catch_34);
      fx_str_t slit_46 = FX_MAKE_STR("(");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_46, 0), _fx_catch_34);
      int_ i_6 = 0;
      FX_COPY_PTR(vcase_8->t1, &args_0);
      _fx_LN14K_form__atom_t lst_6 = args_0;
      for (; lst_6; lst_6 = lst_6->tl, i_6 += 1) {
         _fx_N14K_form__atom_t* a_0 = &lst_6->hd;
         if (i_6 > 0) {
            fx_str_t slit_47 = FX_MAKE_STR(",");
            FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_47, 0), _fx_catch_33);
            FX_CALL(_fx_M2PPFM5spacev1RM1t(pp_0, 0), _fx_catch_33);
         }
         FX_CALL(_fx_M4K_ppFM8pp_atom_v3N14K_form__atom_tR10Ast__loc_tR5PP__t(a_0, &eloc_0, pp_0, 0), _fx_catch_33);

      _fx_catch_33: ;
         FX_CHECK_EXN(_fx_catch_34);
      }
      fx_str_t slit_48 = FX_MAKE_STR(")");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_48, 0), _fx_catch_34);
      FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_catch_34);

   _fx_catch_34: ;
      if (args_0) {
         _fx_free_LN14K_form__atom_t(&args_0);
      }
      FX_FREE_STR(&v_21);
      goto _fx_endmatch_1;
   }
   if (tag_0 == 24) {
      fx_str_t v_22 = {0};
      _fx_T3R9Ast__id_tBR10Ast__loc_t* vcase_9 = &e_0->u.KExpThrow;
      FX_CALL(_fx_M2PPFM5beginv1RM1t(pp_0, 0), _fx_catch_35);
      if (vcase_9->t1) {
         fx_str_t slit_49 = FX_MAKE_STR("rethrow "); fx_copy_str(&slit_49, &v_22);
      }
      else {
         fx_str_t slit_50 = FX_MAKE_STR("throw "); fx_copy_str(&slit_50, &v_22);
      }
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &v_22, 0), _fx_catch_35);
      FX_CALL(_fx_M4K_ppFM6pp_id_v3R9Ast__id_tR10Ast__loc_tR5PP__t(&vcase_9->t0, &eloc_0, pp_0, 0), _fx_catch_35);
      FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_catch_35);

   _fx_catch_35: ;
      FX_FREE_STR(&v_22);
      goto _fx_endmatch_1;
   }
   if (tag_0 == 14) {
      FX_CALL(_fx_M2PPFM5beginv1RM1t(pp_0, 0), _fx_catch_36);
      fx_str_t slit_51 = FX_MAKE_STR("(");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_51, 0), _fx_catch_36);
      FX_CALL(_fx_M2PPFM3cutv1RM1t(pp_0, 0), _fx_catch_36);
      FX_CALL(_fx_M4K_ppFM8ppatoms_v3LN14K_form__atom_tR10Ast__loc_tR5PP__t(e_0->u.KExpMkTuple.t0, &eloc_0, pp_0, 0),
         _fx_catch_36);
      FX_CALL(_fx_M2PPFM3cutv1RM1t(pp_0, 0), _fx_catch_36);
      fx_str_t slit_52 = FX_MAKE_STR(")");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_52, 0), _fx_catch_36);
      FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_catch_36);

   _fx_catch_36: ;
      goto _fx_endmatch_1;
   }
   if (tag_0 == 15) {
      _fx_T2R9Ast__id_tLT2R9Ast__id_tN14K_form__ktyp_t v_23 = {0};
      _fx_LT2R9Ast__id_tN14K_form__ktyp_t relems_0 = 0;
      _fx_LN14K_form__atom_t al_0 = 0;
      _fx_T2LN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* vcase_10 = &e_0->u.KExpMkRecord;
      _fx_T2N14K_form__ktyp_tR10Ast__loc_t* v_24 = &vcase_10->t1;
      _fx_R10Ast__loc_t* loc_0 = &v_24->t1;
      _fx_N14K_form__ktyp_t t_4 = v_24->t0;
      FX_CALL(_fx_M2PPFM6beginvv1RM1t(pp_0, 0), _fx_catch_41);
      int tag_1 = FX_REC_VARIANT_TAG(t_4);
      if (tag_1 == 15) {
         _fx_T2R9Ast__id_tLT2R9Ast__id_tN14K_form__ktyp_t* vcase_11 = &t_4->u.KTypRecord;
         _fx_make_T2R9Ast__id_tLT2R9Ast__id_tN14K_form__ktyp_t(&vcase_11->t0, vcase_11->t1, &v_23);
      }
      else if (tag_1 == 16) {
         _fx_N15K_form__kinfo_t v_25 = {0};
         _fx_R17K_form__kdeftyp_t v_26 = {0};
         _fx_R21K_form__kdefvariant_t v_27 = {0};
         _fx_R9Ast__id_t* n_4 = &t_4->u.KTypName;
         FX_CALL(_fx_M6K_formFM6kinfo_N15K_form__kinfo_t2R9Ast__id_tR10Ast__loc_t(n_4, loc_0, &v_25, 0), _fx_catch_38);
         int tag_2 = v_25.tag;
         if (tag_2 == 8) {
            _fx_copy_R17K_form__kdeftyp_t(&v_25.u.KTyp->data, &v_26);
            _fx_N14K_form__ktyp_t v_28 = v_26.kt_typ;
            if (FX_REC_VARIANT_TAG(v_28) == 15) {
               _fx_make_T2R9Ast__id_tLT2R9Ast__id_tN14K_form__ktyp_t(&v_26.kt_name, v_28->u.KTypRecord.t1, &v_23);
               goto _fx_endmatch_0;
            }
         }
         if (tag_2 == 5) {
            _fx_copy_R21K_form__kdefvariant_t(&v_25.u.KVariant->data, &v_27);
            _fx_LT2R9Ast__id_tN14K_form__ktyp_t v_29 = v_27.kvar_cases;
            if (v_29 != 0) {
               if (v_29->tl == 0) {
                  _fx_T2R9Ast__id_tN14K_form__ktyp_t* v_30 = &v_29->hd;
                  _fx_N14K_form__ktyp_t v_31 = v_30->t1;
                  if (FX_REC_VARIANT_TAG(v_31) == 15) {
                     _fx_make_T2R9Ast__id_tLT2R9Ast__id_tN14K_form__ktyp_t(&v_30->t0, v_31->u.KTypRecord.t1, &v_23);
                     goto _fx_endmatch_0;
                  }
               }
            }
         }
         _fx_N14K_form__ktyp_t v_32 = 0;
         fx_str_t v_33 = {0};
         fx_str_t v_34 = {0};
         fx_exn_t v_35 = {0};
         FX_CALL(_fx_M6K_formFM8KTypNameN14K_form__ktyp_t1R9Ast__id_t(n_4, &v_32), _fx_catch_37);
         FX_CALL(_fx_M6K_formFM6stringS1N14K_form__ktyp_t(v_32, &v_33, 0), _fx_catch_37);
         fx_str_t slit_53 = FX_MAKE_STR("KPP: invalid record type \'");
         fx_str_t slit_54 = FX_MAKE_STR("\' in KExpMkRecord(...)");
         {
            const fx_str_t strs_1[] = { slit_53, v_33, slit_54 };
            FX_CALL(fx_strjoin(0, 0, 0, strs_1, 3, &v_34), _fx_catch_37);
         }
         FX_CALL(_fx_M3AstFM11compile_errE2RM5loc_tS(loc_0, &v_34, &v_35, 0), _fx_catch_37);
         FX_THROW(&v_35, false, _fx_catch_37);

      _fx_catch_37: ;
         fx_free_exn(&v_35);
         FX_FREE_STR(&v_34);
         FX_FREE_STR(&v_33);
         if (v_32) {
            _fx_free_N14K_form__ktyp_t(&v_32);
         }

      _fx_endmatch_0: ;
         FX_CHECK_EXN(_fx_catch_38);

      _fx_catch_38: ;
         _fx_free_R21K_form__kdefvariant_t(&v_27);
         _fx_free_R17K_form__kdeftyp_t(&v_26);
         _fx_free_N15K_form__kinfo_t(&v_25);
      }
      else {
         fx_str_t v_36 = {0};
         fx_str_t v_37 = {0};
         fx_exn_t v_38 = {0};
         FX_CALL(_fx_M6K_formFM6stringS1N14K_form__ktyp_t(t_4, &v_36, 0), _fx_catch_39);
         fx_str_t slit_55 = FX_MAKE_STR("KPP: invalid record type \'");
         fx_str_t slit_56 = FX_MAKE_STR("\' in KExpMkRecord(...)");
         {
            const fx_str_t strs_2[] = { slit_55, v_36, slit_56 };
            FX_CALL(fx_strjoin(0, 0, 0, strs_2, 3, &v_37), _fx_catch_39);
         }
         FX_CALL(_fx_M3AstFM11compile_errE2RM5loc_tS(loc_0, &v_37, &v_38, 0), _fx_catch_39);
         FX_THROW(&v_38, false, _fx_catch_39);

      _fx_catch_39: ;
         fx_free_exn(&v_38);
         FX_FREE_STR(&v_37);
         FX_FREE_STR(&v_36);
      }
      FX_CHECK_EXN(_fx_catch_41);
      _fx_R9Ast__id_t rn_0 = v_23.t0;
      FX_COPY_PTR(v_23.t1, &relems_0);
      fx_str_t slit_57 = FX_MAKE_STR("__record__ ");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_57, 0), _fx_catch_41);
      bool res_2;
      FX_CALL(_fx_M4K_ppFM6__ne__B2R9Ast__id_tR9Ast__id_t(&rn_0, &_fx_g9Ast__noid, &res_2, 0), _fx_catch_41);
      if (res_2) {
         FX_CALL(_fx_M4K_ppFM6pp_id_v3R9Ast__id_tR10Ast__loc_tR5PP__t(&rn_0, &eloc_0, pp_0, 0), _fx_catch_41);
         fx_str_t slit_58 = FX_MAKE_STR(" ");
         FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_58, 0), _fx_catch_41);
      }
      fx_str_t slit_59 = FX_MAKE_STR("{");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_59, 0), _fx_catch_41);
      FX_CALL(_fx_M2PPFM7newlinev1RM1t(pp_0, 0), _fx_catch_41);
      int_ i_7 = 0;
      FX_COPY_PTR(vcase_10->t0, &al_0);
      _fx_LN14K_form__atom_t lst_7 = al_0;
      _fx_LT2R9Ast__id_tN14K_form__ktyp_t lst_8 = relems_0;
      for (; lst_7 && lst_8; lst_8 = lst_8->tl, lst_7 = lst_7->tl, i_7 += 1) {
         _fx_T2R9Ast__id_tN14K_form__ktyp_t* __pat___4 = &lst_8->hd;
         _fx_N14K_form__atom_t* a_1 = &lst_7->hd;
         _fx_R9Ast__id_t n_5 = __pat___4->t0;
         if (i_7 > 0) {
            fx_str_t slit_60 = FX_MAKE_STR(",");
            FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_60, 0), _fx_catch_40);
            FX_CALL(_fx_M2PPFM5spacev1RM1t(pp_0, 0), _fx_catch_40);
         }
         FX_CALL(_fx_M4K_ppFM6pp_id_v3R9Ast__id_tR10Ast__loc_tR5PP__t(&n_5, &eloc_0, pp_0, 0), _fx_catch_40);
         fx_str_t slit_61 = FX_MAKE_STR(" = ");
         FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_61, 0), _fx_catch_40);
         FX_CALL(_fx_M4K_ppFM8pp_atom_v3N14K_form__atom_tR10Ast__loc_tR5PP__t(a_1, &eloc_0, pp_0, 0), _fx_catch_40);

      _fx_catch_40: ;
         FX_CHECK_EXN(_fx_catch_41);
      }
      int s_0 = !lst_7 + !lst_8;
      FX_CHECK_EQ_SIZE(s_0 == 0 || s_0 == 2, _fx_catch_41);
      FX_CALL(_fx_M2PPFM6breakuv1RM1t(pp_0, 0), _fx_catch_41);
      fx_str_t slit_62 = FX_MAKE_STR("}");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_62, 0), _fx_catch_41);
      FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_catch_41);

   _fx_catch_41: ;
      if (al_0) {
         _fx_free_LN14K_form__atom_t(&al_0);
      }
      if (relems_0) {
         _fx_free_LT2R9Ast__id_tN14K_form__ktyp_t(&relems_0);
      }
      _fx_free_T2R9Ast__id_tLT2R9Ast__id_tN14K_form__ktyp_t(&v_23);
      goto _fx_endmatch_1;
   }
   if (tag_0 == 16) {
      _fx_T2LT2R9Ast__id_tN14K_form__ktyp_tLR9Ast__id_t v_39 = {0};
      _fx_LT2R9Ast__id_tN14K_form__ktyp_t fvars_0 = 0;
      _fx_LN14K_form__atom_t args_1 = 0;
      _fx_T4R9Ast__id_tR9Ast__id_tLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* vcase_12 = &e_0->u.KExpMkClosure;
      _fx_R9Ast__id_t* f_2 = &vcase_12->t1;
      _fx_R9Ast__id_t* make_fp_0 = &vcase_12->t0;
      FX_CALL(_fx_M2PPFM5beginv1RM1t(pp_0, 0), _fx_catch_43);
      fx_str_t slit_63 = FX_MAKE_STR("__make_closure__ ");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_63, 0), _fx_catch_43);
      FX_CALL(_fx_M4K_ppFM6pp_id_v3R9Ast__id_tR10Ast__loc_tR5PP__t(make_fp_0, &eloc_0, pp_0, 0), _fx_catch_43);
      fx_str_t slit_64 = FX_MAKE_STR("{");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_64, 0), _fx_catch_43);
      FX_CALL(_fx_M2PPFM6breakiv1RM1t(pp_0, 0), _fx_catch_43);
      fx_str_t slit_65 = FX_MAKE_STR("__fp__ = ");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_65, 0), _fx_catch_43);
      FX_CALL(_fx_M4K_ppFM6pp_id_v3R9Ast__id_tR10Ast__loc_tR5PP__t(f_2, &eloc_0, pp_0, 0), _fx_catch_43);
      bool res_3;
      FX_CALL(_fx_M4K_ppFM6__ne__B2R9Ast__id_tR9Ast__id_t(make_fp_0, &_fx_g9Ast__noid, &res_3, 0), _fx_catch_43);
      if (res_3) {
         FX_CALL(
            _fx_M6K_formFM20get_closure_freevarsT2LT2R9Ast__id_tN14K_form__ktyp_tLR9Ast__id_t2R9Ast__id_tR10Ast__loc_t(f_2,
               &vcase_12->t3.t1, &v_39, 0), _fx_catch_43);
         FX_COPY_PTR(v_39.t0, &fvars_0);
         _fx_LT2R9Ast__id_tN14K_form__ktyp_t lst_9 = fvars_0;
         FX_COPY_PTR(vcase_12->t2, &args_1);
         _fx_LN14K_form__atom_t lst_10 = args_1;
         for (; lst_9 && lst_10; lst_10 = lst_10->tl, lst_9 = lst_9->tl) {
            _fx_N14K_form__atom_t* a_2 = &lst_10->hd;
            _fx_T2R9Ast__id_tN14K_form__ktyp_t* __pat___5 = &lst_9->hd;
            _fx_R9Ast__id_t n_6 = __pat___5->t0;
            fx_str_t slit_66 = FX_MAKE_STR(",");
            FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_66, 0), _fx_catch_42);
            FX_CALL(_fx_M2PPFM5spacev1RM1t(pp_0, 0), _fx_catch_42);
            FX_CALL(_fx_M4K_ppFM6pp_id_v3R9Ast__id_tR10Ast__loc_tR5PP__t(&n_6, &eloc_0, pp_0, 0), _fx_catch_42);
            fx_str_t slit_67 = FX_MAKE_STR(" = ");
            FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_67, 0), _fx_catch_42);
            FX_CALL(_fx_M4K_ppFM8pp_atom_v3N14K_form__atom_tR10Ast__loc_tR5PP__t(a_2, &eloc_0, pp_0, 0), _fx_catch_42);

         _fx_catch_42: ;
            FX_CHECK_EXN(_fx_catch_43);
         }
         int s_1 = !lst_9 + !lst_10;
         FX_CHECK_EQ_SIZE(s_1 == 0 || s_1 == 2, _fx_catch_43);
      }
      FX_CALL(_fx_M2PPFM6breakuv1RM1t(pp_0, 0), _fx_catch_43);
      fx_str_t slit_68 = FX_MAKE_STR("}");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_68, 0), _fx_catch_43);
      FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_catch_43);

   _fx_catch_43: ;
      if (args_1) {
         _fx_free_LN14K_form__atom_t(&args_1);
      }
      if (fvars_0) {
         _fx_free_LT2R9Ast__id_tN14K_form__ktyp_t(&fvars_0);
      }
      _fx_free_T2LT2R9Ast__id_tN14K_form__ktyp_tLR9Ast__id_t(&v_39);
      goto _fx_endmatch_1;
   }
   if (tag_0 == 17) {
      _fx_LLT2BN14K_form__atom_t elems_0 = 0;
      _fx_LLT2BN14K_form__atom_t elems_1 = e_0->u.KExpMkArray.t1;
      FX_CALL(_fx_M2PPFM6beginvv1RM1t(pp_0, 0), _fx_catch_46);
      fx_str_t slit_69 = FX_MAKE_STR("[");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_69, 0), _fx_catch_46);
      FX_CALL(_fx_M2PPFM5spacev1RM1t(pp_0, 0), _fx_catch_46);
      int_ nrows_0;
      FX_CALL(_fx_M4K_ppFM8length1_i1LLT2BN14K_form__atom_t(elems_1, &nrows_0, 0), _fx_catch_46);
      int_ i_8 = 0;
      FX_COPY_PTR(elems_1, &elems_0);
      _fx_LLT2BN14K_form__atom_t lst_11 = elems_0;
      for (; lst_11; lst_11 = lst_11->tl, i_8 += 1) {
         _fx_LT2BN14K_form__atom_t arow_0 = lst_11->hd;
         FX_CALL(_fx_M2PPFM5beginv1RM1t(pp_0, 0), _fx_catch_45);
         int_ j_1 = 0;
         _fx_LT2BN14K_form__atom_t lst_12 = arow_0;
         for (; lst_12; lst_12 = lst_12->tl, j_1 += 1) {
            _fx_N14K_form__atom_t a_3 = {0};
            _fx_T2BN14K_form__atom_t* __pat___6 = &lst_12->hd;
            _fx_copy_N14K_form__atom_t(&__pat___6->t1, &a_3);
            if (j_1 > 0) {
               fx_str_t slit_70 = FX_MAKE_STR(",");
               FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_70, 0), _fx_catch_44);
               FX_CALL(_fx_M2PPFM5spacev1RM1t(pp_0, 0), _fx_catch_44);
            }
            if (__pat___6->t0) {
               fx_str_t slit_71 = FX_MAKE_STR("\\"); FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_71, 0), _fx_catch_44);
            }
            FX_CALL(_fx_M4K_ppFM8pp_atom_v3N14K_form__atom_tR10Ast__loc_tR5PP__t(&a_3, &eloc_0, pp_0, 0), _fx_catch_44);

         _fx_catch_44: ;
            _fx_free_N14K_form__atom_t(&a_3);
            FX_CHECK_EXN(_fx_catch_45);
         }
         FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_catch_45);
         if (i_8 + 1 < nrows_0) {
            fx_str_t slit_72 = FX_MAKE_STR(";");
            FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_72, 0), _fx_catch_45);
            FX_CALL(_fx_M2PPFM5spacev1RM1t(pp_0, 0), _fx_catch_45);
         }

      _fx_catch_45: ;
         FX_CHECK_EXN(_fx_catch_46);
      }
      FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_catch_46);
      FX_CALL(_fx_M2PPFM5spacev1RM1t(pp_0, 0), _fx_catch_46);
      fx_str_t slit_73 = FX_MAKE_STR("]");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_73, 0), _fx_catch_46);

   _fx_catch_46: ;
      if (elems_0) {
         _fx_free_LLT2BN14K_form__atom_t(&elems_0);
      }
      goto _fx_endmatch_1;
   }
   if (tag_0 == 18) {
      _fx_LT2BN14K_form__atom_t elems_2 = 0;
      FX_CALL(_fx_M2PPFM5beginv1RM1t(pp_0, 0), _fx_catch_48);
      fx_str_t slit_74 = FX_MAKE_STR("[");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_74, 0), _fx_catch_48);
      FX_CALL(_fx_M2PPFM5spacev1RM1t(pp_0, 0), _fx_catch_48);
      int_ j_2 = 0;
      FX_COPY_PTR(e_0->u.KExpMkVector.t0, &elems_2);
      _fx_LT2BN14K_form__atom_t lst_13 = elems_2;
      for (; lst_13; lst_13 = lst_13->tl, j_2 += 1) {
         _fx_N14K_form__atom_t a_4 = {0};
         _fx_T2BN14K_form__atom_t* __pat___7 = &lst_13->hd;
         _fx_copy_N14K_form__atom_t(&__pat___7->t1, &a_4);
         if (j_2 > 0) {
            fx_str_t slit_75 = FX_MAKE_STR(",");
            FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_75, 0), _fx_catch_47);
            FX_CALL(_fx_M2PPFM5spacev1RM1t(pp_0, 0), _fx_catch_47);
         }
         if (__pat___7->t0) {
            fx_str_t slit_76 = FX_MAKE_STR("\\"); FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_76, 0), _fx_catch_47);
         }
         FX_CALL(_fx_M4K_ppFM8pp_atom_v3N14K_form__atom_tR10Ast__loc_tR5PP__t(&a_4, &eloc_0, pp_0, 0), _fx_catch_47);

      _fx_catch_47: ;
         _fx_free_N14K_form__atom_t(&a_4);
         FX_CHECK_EXN(_fx_catch_48);
      }
      FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_catch_48);
      FX_CALL(_fx_M2PPFM5spacev1RM1t(pp_0, 0), _fx_catch_48);
      fx_str_t slit_77 = FX_MAKE_STR("]");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_77, 0), _fx_catch_48);

   _fx_catch_48: ;
      if (elems_2) {
         _fx_free_LT2BN14K_form__atom_t(&elems_2);
      }
      goto _fx_endmatch_1;
   }
   if (tag_0 == 12) {
      _fx_T3R9Ast__id_tLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* vcase_13 = &e_0->u.KExpCall;
      FX_CALL(_fx_M2PPFM5beginv1RM1t(pp_0, 0), _fx_catch_49);
      FX_CALL(_fx_M4K_ppFM6pp_id_v3R9Ast__id_tR10Ast__loc_tR5PP__t(&vcase_13->t0, &eloc_0, pp_0, 0), _fx_catch_49);
      fx_str_t slit_78 = FX_MAKE_STR("(");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_78, 0), _fx_catch_49);
      FX_CALL(_fx_M2PPFM3cutv1RM1t(pp_0, 0), _fx_catch_49);
      FX_CALL(_fx_M4K_ppFM8ppatoms_v3LN14K_form__atom_tR10Ast__loc_tR5PP__t(vcase_13->t1, &eloc_0, pp_0, 0), _fx_catch_49);
      FX_CALL(_fx_M2PPFM3cutv1RM1t(pp_0, 0), _fx_catch_49);
      fx_str_t slit_79 = FX_MAKE_STR(")");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_79, 0), _fx_catch_49);
      FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_catch_49);

   _fx_catch_49: ;
      goto _fx_endmatch_1;
   }
   if (tag_0 == 13) {
      _fx_N14K_form__ktyp_t obj_typ_0 = 0;
      _fx_Nt6option1rR23K_form__kdefinterface_t v_40 = {0};
      fx_str_t v_41 = {0};
      _fx_T4R9Ast__id_tiLN14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t* vcase_14 = &e_0->u.KExpICall;
      _fx_R10Ast__loc_t* loc_1 = &vcase_14->t3.t1;
      _fx_R9Ast__id_t* obj_0 = &vcase_14->t0;
      FX_CALL(_fx_M2PPFM5beginv1RM1t(pp_0, 0), _fx_catch_52);
      FX_CALL(_fx_M4K_ppFM6pp_id_v3R9Ast__id_tR10Ast__loc_tR5PP__t(obj_0, &eloc_0, pp_0, 0), _fx_catch_52);
      fx_str_t slit_80 = FX_MAKE_STR(".");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_80, 0), _fx_catch_52);
      FX_CALL(_fx_M6K_formFM12get_idk_ktypN14K_form__ktyp_t2R9Ast__id_tR10Ast__loc_t(obj_0, loc_1, &obj_typ_0, 0),
         _fx_catch_52);
      FX_CALL(
         _fx_M6K_formFM18get_kinterface_optNt6option1rRM15kdefinterface_t2N14K_form__ktyp_tR10Ast__loc_t(obj_typ_0, loc_1,
            &v_40, 0), _fx_catch_52);
      _fx_R9Ast__id_t mname_0;
      if (v_40.tag == 2) {
         _fx_LT2R9Ast__id_tN14K_form__ktyp_t v_42 = 0;
         _fx_T2R9Ast__id_tN14K_form__ktyp_t v_43 = {0};
         FX_COPY_PTR(v_40.u.Some->data.ki_all_methods, &v_42);
         FX_CALL(_fx_M4K_ppFM3nthT2R9Ast__id_tN14K_form__ktyp_t2LT2R9Ast__id_tN14K_form__ktyp_ti(v_42, vcase_14->t1, &v_43, 0),
            _fx_catch_50);
         mname_0 = v_43.t0;

      _fx_catch_50: ;
         _fx_free_T2R9Ast__id_tN14K_form__ktyp_t(&v_43);
         if (v_42) {
            _fx_free_LT2R9Ast__id_tN14K_form__ktyp_t(&v_42);
         }
      }
      else {
         fx_exn_t v_44 = {0};
         fx_str_t slit_81 = FX_MAKE_STR("object used in method call is not a valid interface");
         FX_CALL(_fx_M3AstFM11compile_errE2RM5loc_tS(loc_1, &slit_81, &v_44, 0), _fx_catch_51);
         FX_THROW(&v_44, false, _fx_catch_51);

      _fx_catch_51: ;
         fx_free_exn(&v_44);
      }
      FX_CHECK_EXN(_fx_catch_52);
      FX_CALL(_fx_M3AstFM2ppS1RM4id_t(&mname_0, &v_41, 0), _fx_catch_52);
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &v_41, 0), _fx_catch_52);
      fx_str_t slit_82 = FX_MAKE_STR("(");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_82, 0), _fx_catch_52);
      FX_CALL(_fx_M2PPFM3cutv1RM1t(pp_0, 0), _fx_catch_52);
      FX_CALL(_fx_M4K_ppFM8ppatoms_v3LN14K_form__atom_tR10Ast__loc_tR5PP__t(vcase_14->t2, &eloc_0, pp_0, 0), _fx_catch_52);
      FX_CALL(_fx_M2PPFM3cutv1RM1t(pp_0, 0), _fx_catch_52);
      fx_str_t slit_83 = FX_MAKE_STR(")");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_83, 0), _fx_catch_52);
      FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_catch_52);

   _fx_catch_52: ;
      FX_FREE_STR(&v_41);
      _fx_free_Nt6option1rR23K_form__kdefinterface_t(&v_40);
      if (obj_typ_0) {
         _fx_free_N14K_form__ktyp_t(&obj_typ_0);
      }
      goto _fx_endmatch_1;
   }
   if (tag_0 == 19) {
      fx_str_t v_45 = {0};
      fx_str_t v_46 = {0};
      _fx_LN13K_form__dom_t args_2 = 0;
      _fx_T5N14K_form__atom_tN13Ast__border_tN18Ast__interpolate_tLN13K_form__dom_tT2N14K_form__ktyp_tR10Ast__loc_t* vcase_15 =
         &e_0->u.KExpAt;
      FX_CALL(_fx_M2PPFM5beginv1RM1t(pp_0, 0), _fx_catch_54);
      FX_CALL(_fx_M4K_ppFM8pp_atom_v3N14K_form__atom_tR10Ast__loc_tR5PP__t(&vcase_15->t0, &eloc_0, pp_0, 0), _fx_catch_54);
      FX_CALL(_fx_M3AstFM10border2strS2N13Ast__border_tB(&vcase_15->t1, true, &v_45, 0), _fx_catch_54);
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &v_45, 0), _fx_catch_54);
      FX_CALL(_fx_M3AstFM10interp2strS2N18Ast__interpolate_tB(&vcase_15->t2, true, &v_46, 0), _fx_catch_54);
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &v_46, 0), _fx_catch_54);
      fx_str_t slit_84 = FX_MAKE_STR("[");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_84, 0), _fx_catch_54);
      int_ i_9 = 0;
      FX_COPY_PTR(vcase_15->t3, &args_2);
      _fx_LN13K_form__dom_t lst_14 = args_2;
      for (; lst_14; lst_14 = lst_14->tl, i_9 += 1) {
         _fx_N13K_form__dom_t* dom_0 = &lst_14->hd;
         if (i_9 > 0) {
            fx_str_t slit_85 = FX_MAKE_STR(",");
            FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_85, 0), _fx_catch_53);
            FX_CALL(_fx_M2PPFM5spacev1RM1t(pp_0, 0), _fx_catch_53);
         }
         FX_CALL(_fx_M4K_ppFM7pp_dom_v3N13K_form__dom_tR10Ast__loc_tR5PP__t(dom_0, &eloc_0, pp_0, 0), _fx_catch_53);

      _fx_catch_53: ;
         FX_CHECK_EXN(_fx_catch_54);
      }
      fx_str_t slit_86 = FX_MAKE_STR("]");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_86, 0), _fx_catch_54);
      FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_catch_54);

   _fx_catch_54: ;
      if (args_2) {
         _fx_free_LN13K_form__dom_t(&args_2);
      }
      FX_FREE_STR(&v_46);
      FX_FREE_STR(&v_45);
      goto _fx_endmatch_1;
   }
   if (tag_0 == 11) {
      FX_CALL(_fx_M2PPFM6beginvv2RM1ti(pp_0, 0, 0), _fx_catch_55);
      FX_CALL(_fx_M4K_ppFM11pp_if_chainv3N14K_form__kexp_tBR5PP__t(e_0, true, pp_0, 0), _fx_catch_55);
      FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_catch_55);

   _fx_catch_55: ;
      goto _fx_endmatch_1;
   }
   if (tag_0 == 28) {
      _fx_T3N14K_form__kexp_tN14K_form__kexp_tR10Ast__loc_t* vcase_16 = &e_0->u.KExpWhile;
      FX_CALL(_fx_M2PPFM6beginvv2RM1ti(pp_0, 0, 0), _fx_catch_56);
      FX_CALL(_fx_M2PPFM5beginv1RM1t(pp_0, 0), _fx_catch_56);
      fx_str_t slit_87 = FX_MAKE_STR("while ");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_87, 0), _fx_catch_56);
      FX_CALL(_fx_M4K_ppFM7pp_exp_v2N14K_form__kexp_tR5PP__t(vcase_16->t0, pp_0, 0), _fx_catch_56);
      FX_CALL(_fx_M4K_ppFM16pp_exp_as_block_v4N14K_form__kexp_tBBR5PP__t(vcase_16->t1, true, true, pp_0, 0), _fx_catch_56);
      FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_catch_56);

   _fx_catch_56: ;
      goto _fx_endmatch_1;
   }
   if (tag_0 == 29) {
      _fx_T3N14K_form__kexp_tN14K_form__kexp_tR10Ast__loc_t* vcase_17 = &e_0->u.KExpDoWhile;
      FX_CALL(_fx_M2PPFM6beginvv2RM1ti(pp_0, 0, 0), _fx_catch_57);
      FX_CALL(_fx_M2PPFM5beginv1RM1t(pp_0, 0), _fx_catch_57);
      fx_str_t slit_88 = FX_MAKE_STR("do");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_88, 0), _fx_catch_57);
      FX_CALL(_fx_M4K_ppFM16pp_exp_as_block_v4N14K_form__kexp_tBBR5PP__t(vcase_17->t0, true, false, pp_0, 0), _fx_catch_57);
      FX_CALL(_fx_M2PPFM5beginv1RM1t(pp_0, 0), _fx_catch_57);
      FX_CALL(_fx_M2PPFM5beginv1RM1t(pp_0, 0), _fx_catch_57);
      fx_str_t slit_89 = FX_MAKE_STR("} while ");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_89, 0), _fx_catch_57);
      FX_CALL(_fx_M4K_ppFM7pp_exp_v2N14K_form__kexp_tR5PP__t(vcase_17->t1, pp_0, 0), _fx_catch_57);
      FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_catch_57);
      FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_catch_57);

   _fx_catch_57: ;
      goto _fx_endmatch_1;
   }
   if (tag_0 == 27) {
      _fx_N14K_form__kexp_t v_47 = 0;
      _fx_T5LT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_tN14K_form__kexp_tR16Ast__for_flags_tR10Ast__loc_t* vcase_18 =
         &e_0->u.KExpFor;
      FX_CALL(_fx_M2PPFM6beginvv2RM1ti(pp_0, 0, 0), _fx_catch_58);
      FX_CALL(_fx_M2PPFM5beginv1RM1t(pp_0, 0), _fx_catch_58);
      FX_CALL(_fx_M6Ast_ppFM16pprint_for_flagsv2R5PP__tR16Ast__for_flags_t(pp_0, &vcase_18->t3, 0), _fx_catch_58);
      FX_CALL(_fx_M6K_formFM7KExpNopN14K_form__kexp_t1R10Ast__loc_t(&vcase_18->t4, &v_47), _fx_catch_58);
      FX_CALL(
         _fx_M4K_ppFM11pp_for_hdr_v5N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_tR10Ast__loc_tR5PP__t(v_47,
            vcase_18->t0, vcase_18->t1, &eloc_0, pp_0, 0), _fx_catch_58);
      FX_CALL(_fx_M4K_ppFM16pp_exp_as_block_v4N14K_form__kexp_tBBR5PP__t(vcase_18->t2, true, true, pp_0, 0), _fx_catch_58);
      FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_catch_58);

   _fx_catch_58: ;
      if (v_47) {
         _fx_free_N14K_form__kexp_t(&v_47);
      }
      goto _fx_endmatch_1;
   }
   if (tag_0 == 26) {
      _fx_Ta2S v_48 = {0};
      fx_str_t begin_0 = {0};
      fx_str_t end_0 = {0};
      _fx_LT3N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_t map_cl_0 = 0;
      _fx_T4LT3N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_tN14K_form__kexp_tR16Ast__for_flags_tT2N14K_form__ktyp_tR10Ast__loc_t*
         vcase_19 = &e_0->u.KExpMap;
      _fx_R16Ast__for_flags_t* flags_0 = &vcase_19->t2;
      FX_CALL(_fx_M2PPFM6beginvv2RM1ti(pp_0, 0, 0), _fx_catch_61);
      FX_CALL(_fx_M6Ast_ppFM16pprint_for_flagsv2R5PP__tR16Ast__for_flags_t(pp_0, flags_0, 0), _fx_catch_61);
      _fx_N15Ast__for_make_t v_49 = flags_0->for_flag_make;
      int tag_3 = v_49.tag;
      if (tag_3 == 3) {
         fx_str_t slit_90 = FX_MAKE_STR("["); fx_str_t slit_91 = FX_MAKE_STR("]"); _fx_make_Ta2S(&slit_90, &slit_91, &v_48);
      }
      else if (tag_3 == 2) {
         fx_str_t slit_92 = FX_MAKE_STR("["); fx_str_t slit_93 = FX_MAKE_STR("]"); _fx_make_Ta2S(&slit_92, &slit_93, &v_48);
      }
      else if (tag_3 == 4) {
         fx_str_t slit_94 = FX_MAKE_STR("["); fx_str_t slit_95 = FX_MAKE_STR("]"); _fx_make_Ta2S(&slit_94, &slit_95, &v_48);
      }
      else if (tag_3 == 5) {
         fx_str_t slit_96 = FX_MAKE_STR("("); fx_str_t slit_97 = FX_MAKE_STR(")"); _fx_make_Ta2S(&slit_96, &slit_97, &v_48);
      }
      else {
         fx_str_t v_50 = {0};
         fx_str_t v_51 = {0};
         fx_exn_t v_52 = {0};
         _fx_N15Ast__for_make_t v_53 = flags_0->for_flag_make;
         FX_CALL(_fx_M3AstFM6stringS1N15Ast__for_make_t(&v_53, &v_50, 0), _fx_catch_59);
         fx_str_t slit_98 = FX_MAKE_STR("unsupported type of comprehension \'");
         fx_str_t slit_99 = FX_MAKE_STR("\'");
         {
            const fx_str_t strs_3[] = { slit_98, v_50, slit_99 };
            FX_CALL(fx_strjoin(0, 0, 0, strs_3, 3, &v_51), _fx_catch_59);
         }
         FX_CALL(_fx_M3AstFM11compile_errE2RM5loc_tS(&vcase_19->t3.t1, &v_51, &v_52, 0), _fx_catch_59);
         FX_THROW(&v_52, false, _fx_catch_59);

      _fx_catch_59: ;
         fx_free_exn(&v_52);
         FX_FREE_STR(&v_51);
         FX_FREE_STR(&v_50);
      }
      FX_CHECK_EXN(_fx_catch_61);
      fx_copy_str(&v_48.t0, &begin_0);
      fx_copy_str(&v_48.t1, &end_0);
      FX_CALL(_fx_M2PPFM5beginv1RM1t(pp_0, 0), _fx_catch_61);
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &begin_0, 0), _fx_catch_61);
      FX_COPY_PTR(vcase_19->t0, &map_cl_0);
      _fx_LT3N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_t lst_15 = map_cl_0;
      for (; lst_15; lst_15 = lst_15->tl) {
         _fx_N14K_form__kexp_t pre_e_0 = 0;
         _fx_LT2R9Ast__id_tN13K_form__dom_t pe_l_0 = 0;
         _fx_LR9Ast__id_t at_ids_0 = 0;
         _fx_T3N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_t* __pat___8 = &lst_15->hd;
         FX_COPY_PTR(__pat___8->t0, &pre_e_0);
         FX_COPY_PTR(__pat___8->t1, &pe_l_0);
         FX_COPY_PTR(__pat___8->t2, &at_ids_0);
         FX_CALL(_fx_M2PPFM5spacev1RM1t(pp_0, 0), _fx_catch_60);
         FX_CALL(
            _fx_M4K_ppFM11pp_for_hdr_v5N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_tR10Ast__loc_tR5PP__t(pre_e_0,
               pe_l_0, at_ids_0, &eloc_0, pp_0, 0), _fx_catch_60);

      _fx_catch_60: ;
         FX_FREE_LIST_SIMPLE(&at_ids_0);
         if (pe_l_0) {
            _fx_free_LT2R9Ast__id_tN13K_form__dom_t(&pe_l_0);
         }
         if (pre_e_0) {
            _fx_free_N14K_form__kexp_t(&pre_e_0);
         }
         FX_CHECK_EXN(_fx_catch_61);
      }
      FX_CALL(_fx_M4K_ppFM16pp_exp_as_block_v4N14K_form__kexp_tBBR5PP__t(vcase_19->t1, true, true, pp_0, 0), _fx_catch_61);
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &end_0, 0), _fx_catch_61);
      FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_catch_61);

   _fx_catch_61: ;
      if (map_cl_0) {
         _fx_free_LT3N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_t(&map_cl_0);
      }
      FX_FREE_STR(&end_0);
      FX_FREE_STR(&begin_0);
      _fx_free_Ta2S(&v_48);
      goto _fx_endmatch_1;
   }
   if (tag_0 == 22) {
      _fx_LT2LN14K_form__kexp_tN14K_form__kexp_t cases_0 = 0;
      FX_CALL(_fx_M2PPFM6beginvv2RM1ti(pp_0, 0, 0), _fx_catch_64);
      int_ i_10 = 0;
      FX_COPY_PTR(e_0->u.KExpMatch.t0, &cases_0);
      _fx_LT2LN14K_form__kexp_tN14K_form__kexp_t lst_16 = cases_0;
      for (; lst_16; lst_16 = lst_16->tl, i_10 += 1) {
         _fx_LN14K_form__kexp_t checks_i_0 = 0;
         _fx_N14K_form__kexp_t e_i_0 = 0;
         fx_str_t v_54 = {0};
         _fx_T2LN14K_form__kexp_tN14K_form__kexp_t* __pat___9 = &lst_16->hd;
         FX_COPY_PTR(__pat___9->t0, &checks_i_0);
         FX_COPY_PTR(__pat___9->t1, &e_i_0);
         FX_CALL(_fx_M2PPFM5beginv1RM1t(pp_0, 0), _fx_catch_63);
         if (i_10 == 0) {
            fx_str_t slit_100 = FX_MAKE_STR("if "); fx_copy_str(&slit_100, &v_54);
         }
         else if (checks_i_0 == 0) {
            fx_str_t slit_101 = FX_MAKE_STR("else"); fx_copy_str(&slit_101, &v_54);
         }
         else {
            fx_str_t slit_102 = FX_MAKE_STR("else if "); fx_copy_str(&slit_102, &v_54);
         }
         FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &v_54, 0), _fx_catch_63);
         int_ j_3 = 0;
         _fx_LN14K_form__kexp_t lst_17 = checks_i_0;
         for (; lst_17; lst_17 = lst_17->tl, j_3 += 1) {
            _fx_N14K_form__kexp_t cj_0 = lst_17->hd;
            if (j_3 > 0) {
               fx_str_t slit_103 = FX_MAKE_STR(" &&");
               FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_103, 0), _fx_catch_62);
               FX_CALL(_fx_M2PPFM5spacev1RM1t(pp_0, 0), _fx_catch_62);
            }
            FX_CALL(_fx_M4K_ppFM7pp_exp_v2N14K_form__kexp_tR5PP__t(cj_0, pp_0, 0), _fx_catch_62);

         _fx_catch_62: ;
            FX_CHECK_EXN(_fx_catch_63);
         }
         FX_CALL(_fx_M4K_ppFM16pp_exp_as_block_v4N14K_form__kexp_tBBR5PP__t(e_i_0, true, true, pp_0, 0), _fx_catch_63);
         FX_CALL(_fx_M2PPFM5spacev1RM1t(pp_0, 0), _fx_catch_63);

      _fx_catch_63: ;
         FX_FREE_STR(&v_54);
         if (e_i_0) {
            _fx_free_N14K_form__kexp_t(&e_i_0);
         }
         if (checks_i_0) {
            _fx_free_LN14K_form__kexp_t(&checks_i_0);
         }
         FX_CHECK_EXN(_fx_catch_64);
      }
      FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_catch_64);

   _fx_catch_64: ;
      if (cases_0) {
         _fx_free_LT2LN14K_form__kexp_tN14K_form__kexp_t(&cases_0);
      }
      goto _fx_endmatch_1;
   }
   if (tag_0 == 23) {
      _fx_T3N14K_form__kexp_tN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t* vcase_20 = &e_0->u.KExpTryCatch;
      FX_CALL(_fx_M2PPFM6beginvv2RM1ti(pp_0, 0, 0), _fx_catch_65);
      FX_CALL(_fx_M2PPFM5beginv1RM1t(pp_0, 0), _fx_catch_65);
      fx_str_t slit_104 = FX_MAKE_STR("try");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_104, 0), _fx_catch_65);
      FX_CALL(_fx_M4K_ppFM16pp_exp_as_block_v4N14K_form__kexp_tBBR5PP__t(vcase_20->t0, true, false, pp_0, 0), _fx_catch_65);
      FX_CALL(_fx_M2PPFM5beginv1RM1t(pp_0, 0), _fx_catch_65);
      fx_str_t slit_105 = FX_MAKE_STR("} catch");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_105, 0), _fx_catch_65);
      FX_CALL(_fx_M4K_ppFM16pp_exp_as_block_v4N14K_form__kexp_tBBR5PP__t(vcase_20->t1, true, true, pp_0, 0), _fx_catch_65);
      FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_catch_65);

   _fx_catch_65: ;
      goto _fx_endmatch_1;
   }
   if (tag_0 == 25) {
      _fx_T3N14K_form__atom_tN14K_form__ktyp_tR10Ast__loc_t* vcase_21 = &e_0->u.KExpCast;
      FX_CALL(_fx_M2PPFM5beginv1RM1t(pp_0, 0), _fx_catch_66);
      fx_str_t slit_106 = FX_MAKE_STR("(");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_106, 0), _fx_catch_66);
      FX_CALL(_fx_M4K_ppFM8pp_atom_v3N14K_form__atom_tR10Ast__loc_tR5PP__t(&vcase_21->t0, &eloc_0, pp_0, 0), _fx_catch_66);
      fx_str_t slit_107 = FX_MAKE_STR(" :> ");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_107, 0), _fx_catch_66);
      FX_CALL(_fx_M4K_ppFM8pp_ktyp_v3N14K_form__ktyp_tR10Ast__loc_tR5PP__t(vcase_21->t1, &eloc_0, pp_0, 0), _fx_catch_66);
      fx_str_t slit_108 = FX_MAKE_STR(")");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_108, 0), _fx_catch_66);
      FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_catch_66);

   _fx_catch_66: ;
      goto _fx_endmatch_1;
   }
   FX_FAST_THROW(FX_EXN_NoMatchError, _fx_cleanup);

_fx_endmatch_1: ;

_fx_cleanup: ;
   return fx_status;
}

static int _fx_M4K_ppFM5ppktpv2Nt6option1R17K_form__ktprops_tR5PP__t(
   struct _fx_Nt6option1R17K_form__ktprops_t* ktp_0,
   struct _fx_R5PP__t* pp_0,
   void* fx_fv)
{
   int fx_status = 0;
   if (ktp_0->tag == 2) {
      fx_str_t v_0 = {0};
      if (ktp_0->u.Some.ktp_complex) {
         fx_str_t slit_0 = FX_MAKE_STR("@@complex"); fx_copy_str(&slit_0, &v_0);
      }
      else {
         fx_str_t slit_1 = FX_MAKE_STR("@@simple"); fx_copy_str(&slit_1, &v_0);
      }
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &v_0, 0), _fx_catch_0);
      FX_CALL(_fx_M2PPFM5spacev1RM1t(pp_0, 0), _fx_catch_0);

   _fx_catch_0: ;
      FX_FREE_STR(&v_0);
   }
   return fx_status;
}

static int _fx_M4K_ppFM8pp_atom_v3N14K_form__atom_tR10Ast__loc_tR5PP__t(
   struct _fx_N14K_form__atom_t* a_0,
   struct _fx_R10Ast__loc_t* eloc_0,
   struct _fx_R5PP__t* pp_0,
   void* fx_fv)
{
   int fx_status = 0;
   int tag_0 = a_0->tag;
   if (tag_0 == 1) {
      fx_str_t v_0 = {0};
      FX_CALL(_fx_M6K_formFM7idk2strS2R9Ast__id_tR10Ast__loc_t(&a_0->u.AtomId, eloc_0, &v_0, 0), _fx_catch_0);
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &v_0, 0), _fx_catch_0);

   _fx_catch_0: ;
      FX_FREE_STR(&v_0);
   }
   else if (tag_0 == 2) {
      fx_str_t v_1 = {0};
      FX_CALL(_fx_M6K_formFM8klit2strS3N14K_form__klit_tBR10Ast__loc_t(&a_0->u.AtomLit, false, eloc_0, &v_1, 0), _fx_catch_1);
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &v_1, 0), _fx_catch_1);

   _fx_catch_1: ;
      FX_FREE_STR(&v_1);
   }
   else {
      FX_FAST_THROW(FX_EXN_NoMatchError, _fx_cleanup);
   }

_fx_cleanup: ;
   return fx_status;
}

static int _fx_M4K_ppFM8pp_ktyp_v3N14K_form__ktyp_tR10Ast__loc_tR5PP__t(
   struct _fx_N14K_form__ktyp_t_data_t* t_0,
   struct _fx_R10Ast__loc_t* eloc_0,
   struct _fx_R5PP__t* pp_0,
   void* fx_fv)
{
   int fx_status = 0;
   FX_CALL(_fx_M4K_ppFM8pp_ktyp_v5R5PP__tN14K_form__ktyp_tiR10Ast__loc_tB(pp_0, t_0, 0, eloc_0, false, 0), _fx_cleanup);

_fx_cleanup: ;
   return fx_status;
}

static int _fx_M4K_ppFM17pp_ktyp_detailed_v3N14K_form__ktyp_tR10Ast__loc_tR5PP__t(
   struct _fx_N14K_form__ktyp_t_data_t* t_0,
   struct _fx_R10Ast__loc_t* eloc_0,
   struct _fx_R5PP__t* pp_0,
   void* fx_fv)
{
   int fx_status = 0;
   FX_CALL(_fx_M4K_ppFM8pp_ktyp_v5R5PP__tN14K_form__ktyp_tiR10Ast__loc_tB(pp_0, t_0, 0, eloc_0, true, 0), _fx_cleanup);

_fx_cleanup: ;
   return fx_status;
}

static int _fx_M4K_ppFM7pp_dom_v3N13K_form__dom_tR10Ast__loc_tR5PP__t(
   struct _fx_N13K_form__dom_t* r_0,
   struct _fx_R10Ast__loc_t* eloc_0,
   struct _fx_R5PP__t* pp_0,
   void* fx_fv)
{
   int fx_status = 0;
   FX_CALL(_fx_M4K_ppFM7pp_dom_v3R5PP__tN13K_form__dom_tR10Ast__loc_t(pp_0, r_0, eloc_0, 0), _fx_cleanup);

_fx_cleanup: ;
   return fx_status;
}

static int _fx_M4K_ppFM6pp_id_v3R9Ast__id_tR10Ast__loc_tR5PP__t(
   struct _fx_R9Ast__id_t* i_0,
   struct _fx_R10Ast__loc_t* eloc_0,
   struct _fx_R5PP__t* pp_0,
   void* fx_fv)
{
   fx_str_t v_0 = {0};
   int fx_status = 0;
   FX_CALL(_fx_M6K_formFM7idk2strS2R9Ast__id_tR10Ast__loc_t(i_0, eloc_0, &v_0, 0), _fx_cleanup);
   FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &v_0, 0), _fx_cleanup);

_fx_cleanup: ;
   FX_FREE_STR(&v_0);
   return fx_status;
}

static int _fx_M4K_ppFM9pp_idtyp_v5R9Ast__id_tN14K_form__ktyp_tBR10Ast__loc_tR5PP__t(
   struct _fx_R9Ast__id_t* i_0,
   struct _fx_N14K_form__ktyp_t_data_t* t_0,
   bool detailed_0,
   struct _fx_R10Ast__loc_t* eloc_0,
   struct _fx_R5PP__t* pp_0,
   void* fx_fv)
{
   fx_str_t v_0 = {0};
   int fx_status = 0;
   FX_CALL(_fx_M6K_formFM7idk2strS2R9Ast__id_tR10Ast__loc_t(i_0, eloc_0, &v_0, 0), _fx_cleanup);
   FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &v_0, 0), _fx_cleanup);
   if (FX_REC_VARIANT_TAG(t_0) != 7) {
      fx_str_t slit_0 = FX_MAKE_STR(": ");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_0, 0), _fx_catch_0);
      FX_CALL(_fx_M4K_ppFM8pp_ktyp_v5R5PP__tN14K_form__ktyp_tiR10Ast__loc_tB(pp_0, t_0, 0, eloc_0, detailed_0, 0), _fx_catch_0);

   _fx_catch_0: ;
   }

_fx_cleanup: ;
   FX_FREE_STR(&v_0);
   return fx_status;
}

static int _fx_M4K_ppFM7pp_exp_v2N14K_form__kexp_tR5PP__t(
   struct _fx_N14K_form__kexp_t_data_t* e_0,
   struct _fx_R5PP__t* pp_0,
   void* fx_fv)
{
   int fx_status = 0;
   FX_CALL(fx_check_stack(), _fx_cleanup);
   FX_CALL(_fx_M4K_ppFM7pp_exp_v2R5PP__tN14K_form__kexp_t(pp_0, e_0, 0), _fx_cleanup);

_fx_cleanup: ;
   return fx_status;
}

static int _fx_M4K_ppFM16pp_exp_as_block_v4N14K_form__kexp_tBBR5PP__t(
   struct _fx_N14K_form__kexp_t_data_t* e_0,
   bool flow_0,
   bool closing_0,
   struct _fx_R5PP__t* pp_0,
   void* fx_fv)
{
   _fx_N14K_form__kexp_t e_1 = 0;
   _fx_LN14K_form__kexp_t eseq_0 = 0;
   int fx_status = 0;
   FX_CALL(fx_check_stack(), _fx_cleanup);
   if (FX_REC_VARIANT_TAG(e_0) == 30) {
      _fx_N14K_form__klit_t v_0 = {0};
      _fx_N14K_form__atom_t v_1 = {0};
      _fx_T2N14K_form__ktyp_tR10Ast__loc_t v_2 = {0};
      fx_str_t slit_0 = FX_MAKE_STR("@ccode ");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_0, 0), _fx_catch_0);
      _fx_M6K_formFM10KLitStringN14K_form__klit_t1S(&e_0->u.KExpCCode.t0, &v_0);
      _fx_M6K_formFM7AtomLitN14K_form__atom_t1N14K_form__klit_t(&v_0, &v_1);
      FX_CALL(_fx_M6K_formFM12get_kexp_ctxT2N14K_form__ktyp_tR10Ast__loc_t1N14K_form__kexp_t(e_0, &v_2, 0), _fx_catch_0);
      FX_CALL(_fx_M6K_formFM8KExpAtomN14K_form__kexp_t2N14K_form__atom_tT2N14K_form__ktyp_tR10Ast__loc_t(&v_1, &v_2, &e_1),
         _fx_catch_0);

   _fx_catch_0: ;
      _fx_free_T2N14K_form__ktyp_tR10Ast__loc_t(&v_2);
      _fx_free_N14K_form__atom_t(&v_1);
      _fx_free_N14K_form__klit_t(&v_0);
   }
   else {
      FX_COPY_PTR(e_0, &e_1);
   }
   FX_CHECK_EXN(_fx_cleanup);
   if (FX_REC_VARIANT_TAG(e_1) == 10) {
      FX_COPY_PTR(e_1->u.KExpSeq.t0, &eseq_0);
   }
   else {
      FX_CALL(_fx_cons_LN14K_form__kexp_t(e_1, 0, true, &eseq_0), _fx_catch_1);  _fx_catch_1: ;
   }
   FX_CHECK_EXN(_fx_cleanup);
   if (flow_0) {
      fx_str_t slit_1 = FX_MAKE_STR(" {");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_1, 0), _fx_cleanup);
      FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_cleanup);
      FX_CALL(_fx_M2PPFM6breakiv1RM1t(pp_0, 0), _fx_cleanup);
      FX_CALL(_fx_M2PPFM6beginvv2RM1ti(pp_0, 0, 0), _fx_cleanup);
   }
   else {
      fx_str_t slit_2 = FX_MAKE_STR("{");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_2, 0), _fx_cleanup);
      FX_CALL(_fx_M2PPFM6beginvv1RM1t(pp_0, 0), _fx_cleanup);
      FX_CALL(_fx_M2PPFM5spacev1RM1t(pp_0, 0), _fx_cleanup);
   }
   int_ i_0 = 0;
   _fx_LN14K_form__kexp_t lst_0 = eseq_0;
   for (; lst_0; lst_0 = lst_0->tl, i_0 += 1) {
      _fx_N14K_form__kexp_t e_2 = lst_0->hd;
      if (i_0 > 0) {
         FX_CALL(_fx_M2PPFM8opt_semiv1RM1t(pp_0, 0), _fx_catch_2);
      }
      FX_CALL(_fx_M4K_ppFM7pp_exp_v2R5PP__tN14K_form__kexp_t(pp_0, e_2, 0), _fx_catch_2);

   _fx_catch_2: ;
      FX_CHECK_EXN(_fx_cleanup);
   }
   FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_cleanup);
   FX_CALL(_fx_M2PPFM5spacev1RM1t(pp_0, 0), _fx_cleanup);
   if (closing_0) {
      FX_CALL(_fx_M2PPFM5beginv1RM1t(pp_0, 0), _fx_cleanup);
      fx_str_t slit_3 = FX_MAKE_STR("}");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_3, 0), _fx_cleanup);
      FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_cleanup);
   }

_fx_cleanup: ;
   if (e_1) {
      _fx_free_N14K_form__kexp_t(&e_1);
   }
   if (eseq_0) {
      _fx_free_LN14K_form__kexp_t(&eseq_0);
   }
   return fx_status;
}

static int _fx_M4K_ppFM8ppatoms_v3LN14K_form__atom_tR10Ast__loc_tR5PP__t(
   struct _fx_LN14K_form__atom_t_data_t* al_0,
   struct _fx_R10Ast__loc_t* eloc_0,
   struct _fx_R5PP__t* pp_0,
   void* fx_fv)
{
   int fx_status = 0;
   int_ i_0 = 0;
   _fx_LN14K_form__atom_t lst_0 = al_0;
   for (; lst_0; lst_0 = lst_0->tl, i_0 += 1) {
      _fx_N14K_form__atom_t* a_0 = &lst_0->hd;
      if (i_0 > 0) {
         fx_str_t slit_0 = FX_MAKE_STR(",");
         FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_0, 0), _fx_catch_2);
         FX_CALL(_fx_M2PPFM5spacev1RM1t(pp_0, 0), _fx_catch_2);
      }
      int tag_0 = a_0->tag;
      if (tag_0 == 1) {
         fx_str_t v_0 = {0};
         FX_CALL(_fx_M6K_formFM7idk2strS2R9Ast__id_tR10Ast__loc_t(&a_0->u.AtomId, eloc_0, &v_0, 0), _fx_catch_0);
         FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &v_0, 0), _fx_catch_0);

      _fx_catch_0: ;
         FX_FREE_STR(&v_0);
      }
      else if (tag_0 == 2) {
         fx_str_t v_1 = {0};
         FX_CALL(_fx_M6K_formFM8klit2strS3N14K_form__klit_tBR10Ast__loc_t(&a_0->u.AtomLit, false, eloc_0, &v_1, 0),
            _fx_catch_1);
         FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &v_1, 0), _fx_catch_1);

      _fx_catch_1: ;
         FX_FREE_STR(&v_1);
      }
      else {
         FX_FAST_THROW(FX_EXN_NoMatchError, _fx_catch_2);
      }
      FX_CHECK_EXN(_fx_catch_2);

   _fx_catch_2: ;
      FX_CHECK_EXN(_fx_cleanup);
   }

_fx_cleanup: ;
   return fx_status;
}

static int _fx_M4K_ppFM11pp_for_hdr_v5N14K_form__kexp_tLT2R9Ast__id_tN13K_form__dom_tLR9Ast__id_tR10Ast__loc_tR5PP__t(
   struct _fx_N14K_form__kexp_t_data_t* pre_exp_0,
   struct _fx_LT2R9Ast__id_tN13K_form__dom_t_data_t* for_cl_0,
   struct _fx_LR9Ast__id_t_data_t* at_ids_0,
   struct _fx_R10Ast__loc_t* eloc_0,
   struct _fx_R5PP__t* pp_0,
   void* fx_fv)
{
   int fx_status = 0;
   FX_CALL(fx_check_stack(), _fx_cleanup);
   FX_CALL(_fx_M2PPFM5beginv1RM1t(pp_0, 0), _fx_cleanup);
   fx_str_t slit_0 = FX_MAKE_STR("for ");
   FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_0, 0), _fx_cleanup);
   FX_CALL(_fx_M2PPFM3cutv1RM1t(pp_0, 0), _fx_cleanup);
   if (FX_REC_VARIANT_TAG(pre_exp_0) != 1) {
      FX_CALL(_fx_M4K_ppFM7pp_exp_v2N14K_form__kexp_tR5PP__t(pre_exp_0, pp_0, 0), _fx_catch_0);
      fx_str_t slit_1 = FX_MAKE_STR(";");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_1, 0), _fx_catch_0);
      FX_CALL(_fx_M2PPFM5spacev1RM1t(pp_0, 0), _fx_catch_0);

   _fx_catch_0: ;
   }
   FX_CHECK_EXN(_fx_cleanup);
   int_ i_0 = 0;
   _fx_LT2R9Ast__id_tN13K_form__dom_t lst_0 = for_cl_0;
   for (; lst_0; lst_0 = lst_0->tl, i_0 += 1) {
      _fx_N13K_form__dom_t dom_0 = {0};
      fx_str_t v_0 = {0};
      _fx_T2R9Ast__id_tN13K_form__dom_t* __pat___0 = &lst_0->hd;
      _fx_R9Ast__id_t n_0 = __pat___0->t0;
      _fx_copy_N13K_form__dom_t(&__pat___0->t1, &dom_0);
      if (i_0 != 0) {
         fx_str_t slit_2 = FX_MAKE_STR(",");
         FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_2, 0), _fx_catch_4);
         FX_CALL(_fx_M2PPFM5spacev1RM1t(pp_0, 0), _fx_catch_4);
      }
      FX_CALL(_fx_M6K_formFM7idk2strS2R9Ast__id_tR10Ast__loc_t(&n_0, eloc_0, &v_0, 0), _fx_catch_4);
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &v_0, 0), _fx_catch_4);
      if (i_0 == 0) {
         if (at_ids_0 == 0) {
            goto _fx_endmatch_0;
         }
         if (at_ids_0 != 0) {
            if (at_ids_0->tl == 0) {
               fx_str_t v_1 = {0};
               fx_str_t slit_3 = FX_MAKE_STR("@");
               FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_3, 0), _fx_catch_1);
               FX_CALL(_fx_M6K_formFM7idk2strS2R9Ast__id_tR10Ast__loc_t(&at_ids_0->hd, eloc_0, &v_1, 0), _fx_catch_1);
               FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &v_1, 0), _fx_catch_1);

            _fx_catch_1: ;
               FX_FREE_STR(&v_1);
               goto _fx_endmatch_0;
            }
         }
         fx_str_t slit_4 = FX_MAKE_STR("@");
         FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_4, 0), _fx_catch_3);
         fx_str_t slit_5 = FX_MAKE_STR("(");
         FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_5, 0), _fx_catch_3);
         int_ i_1 = 0;
         _fx_LR9Ast__id_t lst_1 = at_ids_0;
         for (; lst_1; lst_1 = lst_1->tl, i_1 += 1) {
            fx_str_t v_2 = {0};
            _fx_R9Ast__id_t* idx_0 = &lst_1->hd;
            if (i_1 > 0) {
               fx_str_t slit_6 = FX_MAKE_STR(",");
               FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_6, 0), _fx_catch_2);
               FX_CALL(_fx_M2PPFM5spacev1RM1t(pp_0, 0), _fx_catch_2);
            }
            FX_CALL(_fx_M6K_formFM7idk2strS2R9Ast__id_tR10Ast__loc_t(idx_0, eloc_0, &v_2, 0), _fx_catch_2);
            FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &v_2, 0), _fx_catch_2);

         _fx_catch_2: ;
            FX_FREE_STR(&v_2);
            FX_CHECK_EXN(_fx_catch_3);
         }
         fx_str_t slit_7 = FX_MAKE_STR(")");
         FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_7, 0), _fx_catch_3);

      _fx_catch_3: ;

      _fx_endmatch_0: ;
         FX_CHECK_EXN(_fx_catch_4);
      }
      fx_str_t slit_8 = FX_MAKE_STR(" <-");
      FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_8, 0), _fx_catch_4);
      FX_CALL(_fx_M2PPFM5spacev1RM1t(pp_0, 0), _fx_catch_4);
      FX_CALL(_fx_M4K_ppFM7pp_dom_v3R5PP__tN13K_form__dom_tR10Ast__loc_t(pp_0, &dom_0, eloc_0, 0), _fx_catch_4);

   _fx_catch_4: ;
      FX_FREE_STR(&v_0);
      _fx_free_N13K_form__dom_t(&dom_0);
      FX_CHECK_EXN(_fx_cleanup);
   }
   FX_CALL(_fx_M2PPFM3endv1RM1t(pp_0, 0), _fx_cleanup);

_fx_cleanup: ;
   return fx_status;
}

static int _fx_M4K_ppFM11pp_if_chainv3N14K_form__kexp_tBR5PP__t(
   struct _fx_N14K_form__kexp_t_data_t* e_0,
   bool start_0,
   struct _fx_R5PP__t* pp_0,
   void* fx_fv)
{
   _fx_N14K_form__kexp_t e_1 = 0;
   int fx_status = 0;
   FX_CALL(fx_check_stack(), _fx_cleanup);
   FX_COPY_PTR(e_0, &e_1);
   bool start_1 = start_0;
   for (;;) {
      _fx_N14K_form__kexp_t e_2 = 0;
      FX_COPY_PTR(e_1, &e_2);
      if (FX_REC_VARIANT_TAG(e_2) == 11) {
         _fx_T4N14K_form__kexp_tN14K_form__kexp_tN14K_form__kexp_tT2N14K_form__ktyp_tR10Ast__loc_t* vcase_0 = &e_2->u.KExpIf;
         _fx_N14K_form__kexp_t else_e_0 = vcase_0->t2;
         if (start_1) {
            FX_CALL(_fx_M2PPFM5beginv1RM1t(pp_0, 0), _fx_catch_0);
            fx_str_t slit_0 = FX_MAKE_STR("if ");
            FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_0, 0), _fx_catch_0);
         }
         else {
            fx_str_t slit_1 = FX_MAKE_STR("else if "); FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_1, 0), _fx_catch_0);
         }
         FX_CALL(_fx_M4K_ppFM7pp_exp_v2N14K_form__kexp_tR5PP__t(vcase_0->t0, pp_0, 0), _fx_catch_0);
         bool have_else_0;
         if (FX_REC_VARIANT_TAG(else_e_0) == 1) {
            have_else_0 = false;
         }
         else {
            have_else_0 = true;
         }
         FX_CHECK_EXN(_fx_catch_0);
         FX_CALL(_fx_M4K_ppFM16pp_exp_as_block_v4N14K_form__kexp_tBBR5PP__t(vcase_0->t1, true, !have_else_0, pp_0, 0),
            _fx_catch_0);
         if (have_else_0) {
            FX_CALL(_fx_M2PPFM5beginv1RM1t(pp_0, 0), _fx_catch_0);
            fx_str_t slit_2 = FX_MAKE_STR("} ");
            FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_2, 0), _fx_catch_0);
            _fx_free_N14K_form__kexp_t(&e_1);
            FX_COPY_PTR(else_e_0, &e_1);
            start_1 = false;
         }
         else {
            FX_BREAK(_fx_catch_0);
         }

      _fx_catch_0: ;
      }
      else {
         fx_str_t slit_3 = FX_MAKE_STR("else");
         FX_CALL(_fx_M2PPFM3strv2RM1tS(pp_0, &slit_3, 0), _fx_catch_1);
         FX_CALL(_fx_M4K_ppFM16pp_exp_as_block_v4N14K_form__kexp_tBBR5PP__t(e_2, true, true, pp_0, 0), _fx_catch_1);
         FX_BREAK(_fx_catch_1);

      _fx_catch_1: ;
      }
      FX_CHECK_EXN(_fx_catch_2);

   _fx_catch_2: ;
      if (e_2) {
         _fx_free_N14K_form__kexp_t(&e_2);
      }
      FX_CHECK_BREAK();
      FX_CHECK_EXN(_fx_cleanup);
   }

_fx_cleanup: ;
   if (e_1) {
      _fx_free_N14K_form__kexp_t(&e_1);
   }
   return fx_status;
}

FX_EXTERN_C int _fx_M4K_ppFM6pp_topv2SLN14K_form__kexp_t(
   fx_str_t* title_0,
   struct _fx_LN14K_form__kexp_t_data_t* code_0,
   void* fx_fv)
{
   _fx_R5PP__t pp_0 = {0};
   int fx_status = 0;
   FX_CALL(_fx_M4FileFM5flushv1RM1t(&_fx_g12File__stdout, 0), _fx_cleanup);
   FX_CALL(_fx_M2PPFM16pprint_to_stdoutRM1t2ii(120, 3, &pp_0, 0), _fx_cleanup);
   FX_CALL(_fx_M2PPFM6beginvv2RM1ti(&pp_0, 0, 0), _fx_cleanup);
   fx_str_t slit_0 = FX_MAKE_STR("");
   if (fx_streq(title_0, &slit_0)) {
      goto _fx_endmatch_0;
   }
   FX_CALL(_fx_M2PPFM3strv2RM1tS(&pp_0, title_0, 0), _fx_catch_0);
   FX_CALL(_fx_M2PPFM7newlinev1RM1t(&pp_0, 0), _fx_catch_0);

_fx_catch_0: ;

_fx_endmatch_0: ;
   FX_CHECK_EXN(_fx_cleanup);
   int_ i_0 = 0;
   _fx_LN14K_form__kexp_t lst_0 = code_0;
   for (; lst_0; lst_0 = lst_0->tl, i_0 += 1) {
      _fx_N14K_form__kexp_t e_0 = lst_0->hd;
      if (i_0 > 0) {
         FX_CALL(_fx_M2PPFM8opt_semiv1RM1t(&pp_0, 0), _fx_catch_1);
      }
      FX_CALL(_fx_M4K_ppFM7pp_exp_v2R5PP__tN14K_form__kexp_t(&pp_0, e_0, 0), _fx_catch_1);

   _fx_catch_1: ;
      FX_CHECK_EXN(_fx_cleanup);
   }
   FX_CALL(_fx_M2PPFM3endv1RM1t(&pp_0, 0), _fx_cleanup);
   FX_CALL(_fx_M2PPFM5flushv1RM1t(&pp_0, 0), _fx_cleanup);
   fx_str_t slit_1 = FX_MAKE_STR("\n");
   _fx_F12print_stringv1S(&slit_1, 0);
   FX_CALL(_fx_M4FileFM5flushv1RM1t(&_fx_g12File__stdout, 0), _fx_cleanup);

_fx_cleanup: ;
   _fx_free_R5PP__t(&pp_0);
   return fx_status;
}

FX_EXTERN_C int _fx_M4K_ppFM8pp_kmodsv1LR17K_form__kmodule_t(struct _fx_LR17K_form__kmodule_t_data_t* kmods_0, void* fx_fv)
{
   int fx_status = 0;
   int_ i_0 = 0;
   _fx_LR17K_form__kmodule_t lst_0 = kmods_0;
   for (; lst_0; lst_0 = lst_0->tl, i_0 += 1) {
      _fx_LN14K_form__kexp_t km_top_0 = 0;
      fx_str_t km_cname_0 = {0};
      fx_str_t v_0 = {0};
      fx_str_t v_1 = {0};
      _fx_R17K_form__kmodule_t* __pat___0 = &lst_0->hd;
      FX_COPY_PTR(__pat___0->km_top, &km_top_0);
      fx_copy_str(&__pat___0->km_cname, &km_cname_0);
      int_ v_2 = _fx_M4K_ppFM6lengthi1LN14K_form__kexp_t(km_top_0, 0);
      FX_CALL(_fx_F6stringS1i(v_2, &v_0, 0), _fx_catch_0);
      fx_str_t slit_0 =
         FX_MAKE_STR("\n"
            U"///////// module ");
      fx_str_t slit_1 = FX_MAKE_STR(": ");
      fx_str_t slit_2 = FX_MAKE_STR(" expressions //////////");
      {
         const fx_str_t strs_0[] = { slit_0, km_cname_0, slit_1, v_0, slit_2 };
         FX_CALL(fx_strjoin(0, 0, 0, strs_0, 5, &v_1), _fx_catch_0);
      }
      FX_CALL(_fx_M4K_ppFM6pp_topv2SLN14K_form__kexp_t(&v_1, km_top_0, 0), _fx_catch_0);

   _fx_catch_0: ;
      FX_FREE_STR(&v_1);
      FX_FREE_STR(&v_0);
      FX_FREE_STR(&km_cname_0);
      if (km_top_0) {
         _fx_free_LN14K_form__kexp_t(&km_top_0);
      }
      FX_CHECK_EXN(_fx_cleanup);
   }

_fx_cleanup: ;
   return fx_status;
}

FX_EXTERN_C int _fx_M4K_ppFM16pp_top_to_stringS1LN14K_form__kexp_t(
   struct _fx_LN14K_form__kexp_t_data_t* code_0,
   fx_str_t* fx_result,
   void* fx_fv)
{
   _fx_R5PP__t pp_0 = {0};
   _fx_LS all_lines_0 = 0;
   int fx_status = 0;
   FX_CALL(_fx_M2PPFM21pprint_to_string_listRM1t2ii(120, 3, &pp_0, 0), _fx_cleanup);
   FX_CALL(_fx_M2PPFM6beginvv2RM1ti(&pp_0, 0, 0), _fx_cleanup);
   int_ i_0 = 0;
   _fx_LN14K_form__kexp_t lst_0 = code_0;
   for (; lst_0; lst_0 = lst_0->tl, i_0 += 1) {
      _fx_N14K_form__kexp_t e_0 = lst_0->hd;
      if (i_0 != 0) {
         FX_CALL(_fx_M2PPFM6break0v1RM1t(&pp_0, 0), _fx_catch_0);
      }
      FX_CALL(_fx_M4K_ppFM7pp_exp_v2R5PP__tN14K_form__kexp_t(&pp_0, e_0, 0), _fx_catch_0);

   _fx_catch_0: ;
      FX_CHECK_EXN(_fx_cleanup);
   }
   FX_CALL(_fx_M2PPFM7newlinev1RM1t(&pp_0, 0), _fx_cleanup);
   FX_CALL(_fx_M2PPFM3endv1RM1t(&pp_0, 0), _fx_cleanup);
   FX_CALL(_fx_M2PPFM5flushv1RM1t(&pp_0, 0), _fx_cleanup);
   _fx_FPLS0* f_0 = &pp_0.get_f;
   FX_CALL(f_0->fp(&all_lines_0, f_0->fcv), _fx_cleanup);
   fx_str_t slit_0 = FX_MAKE_STR("");
   fx_str_t slit_1 = FX_MAKE_STR("\n");
   fx_str_t slit_2 = FX_MAKE_STR("\n");
   FX_CALL(_fx_F12join_embraceS4SSSLS(&slit_0, &slit_1, &slit_2, all_lines_0, fx_result, 0), _fx_cleanup);

_fx_cleanup: ;
   _fx_free_R5PP__t(&pp_0);
   if (all_lines_0) {
      _fx_free_LS(&all_lines_0);
   }
   return fx_status;
}

FX_EXTERN_C int fx_init_K_pp(void)
{
   int fx_status = 0;
   return fx_status;
}

FX_EXTERN_C void fx_deinit_K_pp(void)
{

}

